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