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