Rev 4717: Add a knownFailure case where we could drop a .BASE but fail to. in http://bazaar.launchpad.net/~jameinel/bzr/2.0-40412-show-base-weave

John Arbash Meinel john at arbash-meinel.com
Tue Dec 8 20:55:26 GMT 2009


At http://bazaar.launchpad.net/~jameinel/bzr/2.0-40412-show-base-weave

------------------------------------------------------------
revno: 4717
revision-id: john at arbash-meinel.com-20091208205509-w96riinzbqwrc407
parent: john at arbash-meinel.com-20091208204220-8i92y03pp6e0xn0u
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.0-40412-show-base-weave
timestamp: Tue 2009-12-08 14:55:09 -0600
message:
  Add a knownFailure case where we could drop a .BASE but fail to.
  
  It is hard to make that case correct, so we don't try (yet).
-------------- next part --------------
=== modified file 'bzrlib/tests/test_merge_core.py'
--- a/bzrlib/tests/test_merge_core.py	2009-12-08 20:30:25 +0000
+++ b/bzrlib/tests/test_merge_core.py	2009-12-08 20:55:09 +0000
@@ -489,6 +489,39 @@
         self.failUnlessExists('b/file.BASE')
         self.failUnlessExists('b/file.OTHER')
 
+    def test_weave_conflicts_not_in_base(self):
+        builder = self.make_branch_builder('source')
+        builder.start_series()
+        #  A        base revision (before criss-cross)
+        #  |\
+        #  B C      B does nothing, C adds 'foo'
+        #  |X|
+        #  D E      D and E modify foo in incompatible ways
+        #
+        # Merging will conflict, with C as a clean base text. However, the
+        # current code uses A as the global base and 'foo' doesn't exist there.
+        # It isn't trivial to create foo.BASE because it tries to look up
+        # attributes like 'executable' in A.
+        builder.build_snapshot('A-id', None, [
+            ('add', ('', 'TREE_ROOT', 'directory', None))])
+        builder.build_snapshot('B-id', ['A-id'], [])
+        builder.build_snapshot('C-id', ['A-id'], [
+            ('add', ('foo', 'foo-id', 'file', 'orig\ncontents\n'))])
+        builder.build_snapshot('D-id', ['B-id', 'C-id'], [
+            ('add', ('foo', 'foo-id', 'file', 'orig\ncontents\nand D\n'))])
+        builder.build_snapshot('E-id', ['C-id', 'B-id'], [
+            ('modify', ('foo-id', 'orig\ncontents\nand E\n'))])
+        builder.finish_series()
+        tree = builder.get_branch().create_checkout('tree', lightweight=True)
+        self.assertEqual(1, tree.merge_from_branch(tree.branch,
+                                                   to_revision='D-id',
+                                                   merge_type=WeaveMerger))
+        self.failUnlessExists('tree/foo.THIS')
+        self.failUnlessExists('tree/foo.OTHER')
+        self.expectFailure('fail to create .BASE in some criss-cross merges',
+            self.failUnlessExists, 'tree/foo.BASE')
+        self.failUnlessExists('tree/foo.BASE')
+
     def test_merge_unrelated(self):
         """Sucessfully merges unrelated branches with no common names"""
         wta = self.make_branch_and_tree('a')



More information about the bazaar-commits mailing list