Rev 5562: Clean up the tests a bit. in http://bazaar.launchpad.net/~jameinel/bzr/2.3-commit-to-stacked

John Arbash Meinel john at arbash-meinel.com
Mon Dec 6 22:12:25 GMT 2010


At http://bazaar.launchpad.net/~jameinel/bzr/2.3-commit-to-stacked

------------------------------------------------------------
revno: 5562
revision-id: john at arbash-meinel.com-20101206221152-fh2b2917wbuuvgn1
parent: john at arbash-meinel.com-20101203220912-5ryprs3cpss3ydxb
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.3-commit-to-stacked
timestamp: Mon 2010-12-06 16:11:52 -0600
message:
  Clean up the tests a bit.
  
  Ensure that Remote permutations use a stacked branch which is also remote.
  Add an 'assertPresent' so that the asserts are a bit clearer.
-------------- next part --------------
=== modified file 'bzrlib/tests/per_repository_reference/test_commit_with_stacking.py'
--- a/bzrlib/tests/per_repository_reference/test_commit_with_stacking.py	2010-12-03 22:09:12 +0000
+++ b/bzrlib/tests/per_repository_reference/test_commit_with_stacking.py	2010-12-06 22:11:52 +0000
@@ -15,20 +15,53 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
 
+from bzrlib import (
+    remote,
+    urlutils,
+    )
 from bzrlib.tests.per_repository import TestCaseWithRepository
 
 
 class TestCommitWithStacking(TestCaseWithRepository):
 
+    r1_key = ('rev1-id',)
+    r2_key = ('rev2-id',)
+
     def make_stacked_target(self):
         base_tree = self.make_branch_and_tree('base')
         self.build_tree(['base/f1.txt'])
         base_tree.add(['f1.txt'], ['f1.txt-id'])
-        base_tree.commit('initial', rev_id='initial-rev-id')
-        stacked_tree = base_tree.bzrdir.sprout('stacked',
-            stacked=True).open_workingtree()
+        base_tree.commit('initial', rev_id=self.r1_key[0])
+        self.build_tree(['base/f2.txt'])
+        base_tree.add(['f2.txt'], ['f2.txt-id'])
+        base_tree.commit('base adds f2', rev_id=self.r2_key[0])
+        stacked_url = urlutils.join(base_tree.branch.base, '../stacked')
+        stacked_bzrdir = base_tree.bzrdir.sprout(stacked_url,
+            stacked=True)
+        if isinstance(stacked_bzrdir, remote.RemoteBzrDir):
+            stacked_branch = stacked_bzrdir.open_branch()
+            stacked_tree = stacked_branch.create_checkout('stacked',
+                lightweight=True)
+        else:
+            stacked_tree = stacked_bzrdir.open_workingtree()
         return base_tree, stacked_tree
 
+    def get_only_repo(self, tree):
+        """Open just the repository used by this tree.
+
+        This returns a read locked Repository object without any stacking
+        fallbacks.
+        """
+        repo = tree.branch.repository.bzrdir.open_repository()
+        repo.lock_read()
+        self.addCleanup(repo.unlock)
+        return repo
+
+    def assertPresent(self, expected, vf, keys):
+        """Check which of the supplied keys are present."""
+        parent_map = vf.get_parent_map(keys)
+        self.assertEqual(sorted(expected), sorted(parent_map))
+
     def test_simple_commit(self):
         base_tree, stacked_tree = self.make_stacked_target()
         self.assertEqual(1,
@@ -37,12 +70,11 @@
         stacked_tree.commit('new content', rev_id='new-rev-id')
         # We open the repository without fallbacks to ensure the data is
         # locally true
-        stacked_only_repo = stacked_tree.bzrdir.open_repository()
-        stacked_only_repo.lock_read()
-        self.addCleanup(stacked_only_repo.unlock)
-        r1_key = ('initial-rev-id',)
-        self.assertEqual([r1_key],
-            sorted(stacked_only_repo.inventories.get_parent_map([r1_key])))
+        stacked_only_repo = self.get_only_repo(stacked_tree)
+        # We should have the immediate parent inventory available, but not the
+        # grandparent's
+        self.assertPresent([self.r2_key],
+            stacked_only_repo.inventories, [self.r1_key, self.r2_key])
         # And we should be able to pull this revision into another stacked
         # branch
         stacked2_branch = base_tree.bzrdir.sprout('stacked2',
@@ -53,72 +85,76 @@
     def test_merge_commit(self):
         base_tree, stacked_tree = self.make_stacked_target()
         self.build_tree_contents([('base/f1.txt', 'new content\n')])
-        base_tree.commit('second base', rev_id='base2-rev-id')
+        r3_key = ('rev3-id',)
+        base_tree.commit('second base', rev_id=r3_key[0])
         to_be_merged_tree = base_tree.bzrdir.sprout('merged'
             ).open_workingtree()
         self.build_tree(['merged/f2.txt'])
         to_be_merged_tree.add(['f2.txt'], ['f2.txt-id'])
-        to_be_merged_tree.commit('new-to-be-merged', rev_id='to-merge-rev-id')
+        to_merge_key = ('to-merge-rev-id',)
+        to_be_merged_tree.commit('new-to-be-merged', rev_id=to_merge_key[0])
         stacked_tree.merge_from_branch(to_be_merged_tree.branch)
-        stacked_tree.commit('merge', rev_id='merged-rev-id')
-        # Since to-merge-rev-id isn't in base, it should be in stacked.
-        # 'base2-rev-id' shouldn't have the revision, but we should have the
-        # inventory. Also, 'merged-rev-id' has a parent of 'initial-rev-id',
-        # which is in base. So we should have its inventory, but not its
-        # revision-id.
-        stacked_only_repo = stacked_tree.bzrdir.open_repository()
-        stacked_only_repo.lock_read()
-        self.addCleanup(stacked_only_repo.unlock)
-        r1_key = ('initial-rev-id',)
-        r2_key = ('base2-rev-id',)
-        r3_key = ('to-merge-rev-id',)
-        r4_key = ('merged-rev-id',)
-        all_keys = [r1_key, r2_key, r3_key, r4_key]
-        self.assertEqual(sorted([r3_key, r4_key]),
-            sorted(stacked_only_repo.revisions.get_parent_map(all_keys)))
-        self.assertEqual(sorted(all_keys),
-            sorted(stacked_only_repo.inventories.get_parent_map(all_keys)))
+        merged_key = ('merged-rev-id',)
+        stacked_tree.commit('merge', rev_id=merged_key[0])
+        # to-merge isn't in base, so it should be in stacked.
+        # rev3-id is a parent of a revision we have, so we should have the
+        # inventory, but not the revision.
+        # merged has a parent of r2, so we should also have r2's
+        # inventory-but-not-revision.
+        # Nothing has r1 directly, so we shouldn't have anything present for it
+        stacked_only_repo = self.get_only_repo(stacked_tree)
+        all_keys = [self.r1_key, self.r2_key, r3_key, to_merge_key, merged_key]
+        self.assertPresent([to_merge_key, merged_key],
+                           stacked_only_repo.revisions, all_keys)
+        self.assertPresent([self.r2_key, r3_key, to_merge_key, merged_key],
+                           stacked_only_repo.inventories, all_keys)
 
     def test_merge_from_master(self):
         base_tree, stacked_tree = self.make_stacked_target()
         self.build_tree_contents([('base/f1.txt', 'new content\n')])
-        base_tree.commit('second base', rev_id='base2-rev-id')
+        r3_key = ('rev3-id',)
+        base_tree.commit('second base', rev_id=r3_key[0])
         stacked_tree.merge_from_branch(base_tree.branch)
-        stacked_tree.commit('merge', rev_id='merged-rev-id')
-        r1_key = ('initial-rev-id',)
-        r2_key = ('base2-rev-id',)
-        r3_key = ('merged-rev-id',)
-        all_keys = [r1_key, r2_key, r3_key]
+        merged_key = ('merged-rev-id',)
+        stacked_tree.commit('merge', rev_id=merged_key[0])
+        all_keys = [self.r1_key, self.r2_key, r3_key, merged_key]
         # We shouldn't have any of the base revisions in the local repo, but we
         # should have both base inventories.
-        stacked_only_repo = stacked_tree.bzrdir.open_repository()
-        stacked_only_repo.lock_read()
-        self.addCleanup(stacked_only_repo.unlock)
-        self.assertEqual(sorted([r3_key]),
-            sorted(stacked_only_repo.revisions.get_parent_map(all_keys)))
-        self.assertEqual(sorted(all_keys),
-            sorted(stacked_only_repo.inventories.get_parent_map(all_keys)))
+        stacked_only_repo = self.get_only_repo(stacked_tree)
+        self.assertPresent([merged_key],
+                           stacked_only_repo.revisions, all_keys)
+        self.assertPresent([self.r2_key, r3_key, merged_key],
+                           stacked_only_repo.inventories, all_keys)
 
     def test_multi_stack(self):
         """base + stacked + stacked-on-stacked"""
         base_tree, stacked_tree = self.make_stacked_target()
-        self.build_tree(['stacked/f2.txt'])
-        stacked_tree.add(['f2.txt'], ['f2.txt-id'])
-        stacked_tree.commit('add f2', rev_id='stacked-rev-id')
-        stacked2_tree = stacked_tree.bzrdir.sprout('stacked2',
-                            revision_id='initial-rev-id',
-                            stacked=True).open_workingtree()
+        self.build_tree(['stacked/f3.txt'])
+        stacked_tree.add(['f3.txt'], ['f3.txt-id'])
+        stacked_key = ('stacked-rev-id',)
+        stacked_tree.commit('add f3', rev_id=stacked_key[0])
+        # This ensures we get a Remote URL, rather than a local one.
+        stacked2_url = urlutils.join(base_tree.branch.base, '../stacked2')
+        stacked2_bzrdir = stacked_tree.bzrdir.sprout(stacked2_url,
+                            revision_id=self.r1_key[0],
+                            stacked=True)
+        if isinstance(stacked2_bzrdir, remote.RemoteBzrDir):
+            stacked2_branch = stacked2_bzrdir.open_branch()
+            stacked2_tree = stacked2_branch.create_checkout('stacked2',
+                lightweight=True)
+        else:
+            stacked2_tree = stacked2_bzrdir.open_workingtree()
         # stacked2 is stacked on stacked, but its content is rev1, so
         # it needs to pull the basis information from a fallback-of-fallback.
         self.build_tree(['stacked2/f3.txt'])
+        stacked2_only_repo = self.get_only_repo(stacked2_tree)
+        self.assertPresent([], stacked2_only_repo.inventories, [self.r1_key])
         stacked2_tree.add(['f3.txt'], ['f3.txt-id'])
         stacked2_tree.commit('add f3', rev_id='stacked2-rev-id')
-        stacked2_only_repo = stacked2_tree.bzrdir.open_repository()
-        stacked2_only_repo.lock_read()
-        self.addCleanup(stacked2_only_repo.unlock)
-        r1_key = ('initial-rev-id',)
-        self.assertEqual([r1_key],
-            sorted(stacked2_only_repo.inventories.get_parent_map([r1_key])))
+        # We added data to this read-locked repo, so refresh it
+        stacked2_only_repo.refresh_data()
+        self.assertPresent([self.r1_key],
+                           stacked2_only_repo.inventories, [self.r1_key])
 
 # TOOD: We need to run the above tests for when the source and/or the target
 #       are remote repositories.



More information about the bazaar-commits mailing list