Rev 3525: Update Merger to set a flag when we encounter a criss-cross merge. in http://bzr.arbash-meinel.com/branches/bzr/1.6-dev/merge_lca_multi
John Arbash Meinel
john at arbash-meinel.com
Tue Jul 22 03:06:31 BST 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.6-dev/merge_lca_multi
------------------------------------------------------------
revno: 3525
revision-id: john at arbash-meinel.com-20080722020529-58d4f9mtxd2p5dvm
parent: john at arbash-meinel.com-20080630232157-j38i11dq21da6ewo
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: merge_lca_multi
timestamp: Mon 2008-07-21 21:05:29 -0500
message:
Update Merger to set a flag when we encounter a criss-cross merge.
-------------- next part --------------
=== modified file 'bzrlib/merge.py'
--- a/bzrlib/merge.py 2008-06-25 10:06:48 +0000
+++ b/bzrlib/merge.py 2008-07-22 02:05:29 +0000
@@ -94,6 +94,7 @@
self._revision_graph = revision_graph
self._base_is_ancestor = None
self._base_is_other_ancestor = None
+ self._is_criss_cross = False
@property
def revision_graph(self):
@@ -359,6 +360,7 @@
if steps > 1:
warning('Warning: criss-cross merge encountered. See bzr'
' help criss-cross.')
+ self._is_criss_cross = True
self.base_tree = self.revision_tree(self.base_rev_id)
self.base_is_ancestor = True
self.base_is_other_ancestor = True
=== modified file 'bzrlib/tests/test_merge.py'
--- a/bzrlib/tests/test_merge.py 2008-06-11 07:22:00 +0000
+++ b/bzrlib/tests/test_merge.py 2008-07-22 02:05:29 +0000
@@ -708,3 +708,51 @@
class TestLCAMerge(TestCaseWithTransport, TestMergeImplementation):
merge_type = _mod_merge.LCAMerger
+
+
+class TestMerger(TestCaseWithTransport):
+
+ def test_find_base(self):
+ # TODO: It would be nice to use make_branch_and_memory_tree here,
+ # unfortunately, I get AssertionErrors during commit if I try
+ # A
+ # |\
+ # B C
+ tree = self.make_branch_and_tree('tree')
+ tree.commit('A', rev_id='A-id')
+ tree.commit('C', rev_id='C-id')
+ tree.set_parent_ids(['A-id'])
+ tree.branch.set_last_revision_info(1, 'A-id')
+ tree.commit('B', rev_id='B-id')
+
+ tree.lock_write()
+ self.addCleanup(tree.unlock)
+ merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(),
+ tree, 'C-id')
+ self.assertEqual('A-id', merger.base_rev_id)
+ self.assertFalse(merger._is_criss_cross)
+
+ def test_find_base_criss_cross(self):
+ # A
+ # |\
+ # B C
+ # |X|
+ # D E
+ tree = self.make_branch_and_tree('tree')
+ tree.commit('A', rev_id='A-id')
+ tree.commit('B', rev_id='B-id')
+ tree.set_parent_ids(['A-id'])
+ tree.branch.set_last_revision_info(1, 'A-id')
+ tree.commit('C', rev_id='C-id')
+ tree.set_parent_ids(['C-id', 'B-id'])
+ tree.commit('E', rev_id='E-id')
+ tree.set_parent_ids(['B-id', 'C-id'])
+ tree.branch.set_last_revision_info(2, 'B-id')
+ tree.commit('D', rev_id='D-id')
+
+ tree.lock_write()
+ self.addCleanup(tree.unlock)
+ merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(),
+ tree, 'E-id')
+ self.assertEqual('A-id', merger.base_rev_id)
+ self.assertTrue(merger._is_criss_cross)
More information about the bazaar-commits
mailing list