Rev 5559: (broken) I think I'm pretty happy with these 3 cases for commit. in http://bazaar.launchpad.net/~jameinel/bzr/2.3-commit-to-stacked

John Arbash Meinel john at arbash-meinel.com
Fri Dec 3 20:00:47 GMT 2010


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

------------------------------------------------------------
revno: 5559
revision-id: john at arbash-meinel.com-20101203200029-c948k8248eqcbops
parent: john at arbash-meinel.com-20101202230218-v9pzqgb839ccskr1
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.3-commit-to-stacked
timestamp: Fri 2010-12-03 14:00:29 -0600
message:
  (broken) I think I'm pretty happy with these 3 cases for commit.
  
  Nothing passes, as nothing has been implemented yet, but getting them
  to pass will be most of the effort.
-------------- next part --------------
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2010-12-02 23:02:18 +0000
+++ b/bzrlib/repository.py	2010-12-03 20:00:29 +0000
@@ -187,10 +187,6 @@
         if not self.repository._fallback_repositories:
             return
 
-        raise errors.BzrError("Cannot commit from a lightweight checkout "
-            "to a stacked branch. See "
-            "https://bugs.launchpad.net/bzr/+bug/375013 for details.")
-
     def commit(self, message):
         """Make the actual commit.
 

=== 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-02 23:02:18 +0000
+++ b/bzrlib/tests/per_repository_reference/test_commit_with_stacking.py	2010-12-03 20:00:29 +0000
@@ -21,14 +21,75 @@
 class TestCommitWithStacking(TestCaseWithRepository):
 
     def make_stacked_target(self):
-        base = self.make_branch_and_tree('base')
+        base_tree = self.make_branch_and_tree('base')
         self.build_tree(['base/f1.txt'])
-        base.add(['f1.txt'], ['f1.txt-id'])
-        stacked = base.bzrdir.sprout('stacked',
-                                     stacked=True).open_workingtree()
-        return base, stacked
+        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()
+        return base_tree, stacked_tree
 
     def test_simple_commit(self):
-        base, stacked = self.make_stacked_target()
+        base_tree, stacked_tree = self.make_stacked_target()
         self.assertEqual(1,
-                len(stacked.branch.repository._fallback_repositories))
+                len(stacked_tree.branch.repository._fallback_repositories))
+        self.build_tree_contents([('stacked/f1.txt', 'new content\n')])
+        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()
+        r1_key = ('initial-rev-id',)
+        self.assertEqual([r1_key],
+            sorted(stacked_only_repo.inventories.get_parent_map([r1_key])))
+        # And we should be able to pull this revision into another stacked
+        # branch
+        stacked2_branch = base_tree.bzrdir.sprout('stacked2',
+                                                  stacked=True).open_branch()
+        stacked2_branch.repository.fetch(stacked_only_repo,
+                                         revision_id='new-rev-id')
+
+    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', 'base2-rev-id')
+        to_be_merged_tree = base_tree.bzrdir.sprout('merged')
+        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')
+        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()
+        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)))
+
+    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',
+                            stacked=True).open_workingtree()
+        # stacked2 is stacked on stacked, but we revert its content to rev1, so
+        # that it needs to pull the basis information from a
+        # fallback-of-fallback.
+        stacked2_tree.update(revision='initial-rev-id')
+        self.build_tree(['stacked2/f3.txt'])
+        stacked2_tree.add(['f3.txt'], ['f3.txt-id'])
+        stacked_tree.commit('add f3', rev_id='stacked2-rev-id')
+        stacked2_only_repo = stacked2_tree.bzrdir.open_repository()
+        r1_key = ('initial-rev-id',)
+        self.assertEqual([r1_key],
+            sorted(stacked2_only_repo.inventories.get_parent_map([r1_key])))



More information about the bazaar-commits mailing list