Rev 6012: Merging unrelated trees prefers THIS root in http://bazaar.launchpad.net/~vila/bzr/integration/

Vincent Ladeuil v.ladeuil+lp at free.fr
Thu Jul 7 10:12:07 UTC 2011


At http://bazaar.launchpad.net/~vila/bzr/integration/

------------------------------------------------------------
revno: 6012 [merge]
revision-id: v.ladeuil+lp at free.fr-20110707101207-6pmr7hhtqh1wqdd6
parent: pqm at pqm.ubuntu.com-20110706145453-tuhya3x9udlu1lmx
parent: v.ladeuil+lp at free.fr-20110707100439-lo1bvs3f2smjpjav
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: trunk
timestamp: Thu 2011-07-07 12:12:07 +0200
message:
  Merging unrelated trees prefers THIS root
modified:
  bzrlib/shelf.py                prepare_shelf.py-20081005181341-n74qe6gu1e65ad4v-1
  bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
  bzrlib/tests/test_shelf_ui.py  test_shelf_ui.py-20081027155203-wtcuazg85wp9u4fv-1
  bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
  bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
  doc/en/release-notes/bzr-2.4.txt bzr2.4.txt-20110114053217-k7ym9jfz243fddjm-1
-------------- next part --------------
=== modified file 'bzrlib/shelf.py'
--- a/bzrlib/shelf.py	2011-05-19 09:32:38 +0000
+++ b/bzrlib/shelf.py	2011-07-06 21:37:16 +0000
@@ -82,6 +82,9 @@
             # when a tree root was deleted / renamed.
             if kind[0] is None and names[1] == '':
                 continue
+            # Also don't shelve deletion of tree root.
+            if kind[1] is None and names[0] == '':
+                continue
             if kind[0] is None or versioned[0] == False:
                 self.creation[file_id] = (kind[1], names[1], parents[1],
                                           versioned)

=== modified file 'bzrlib/tests/test_merge.py'
--- a/bzrlib/tests/test_merge.py	2011-06-28 13:40:29 +0000
+++ b/bzrlib/tests/test_merge.py	2011-07-07 10:04:39 +0000
@@ -135,6 +135,29 @@
             preview = tt.get_preview_tree()
             self.assertEqual(wt.get_root_id(), preview.get_root_id())
 
+    def test_merge_unrelated_retains_root(self):
+        wt = self.make_branch_and_tree('tree')
+        root_id_before_merge = wt.get_root_id()
+        other_tree = self.make_branch_and_tree('other')
+        # Do a commit so there is something to merge
+        other_tree.commit('commit other')
+        self.assertNotEquals(root_id_before_merge, other_tree.get_root_id())
+        wt.merge_from_branch(other_tree.branch,
+                             from_revision=_mod_revision.NULL_REVISION)
+        self.assertEqual(root_id_before_merge, wt.get_root_id())
+
+    def test_merge_preview_unrelated_retains_root(self):
+        wt = self.make_branch_and_tree('tree')
+        other_tree = self.make_branch_and_tree('other')
+        # Do a commit so there is something to merge
+        other_tree.commit('commit other')
+        merger = _mod_merge.Merge3Merger(wt, wt, wt.basis_tree(), other_tree,
+                                         this_branch=wt.branch,
+                                         do_merge=False)
+        with merger.make_preview_transform() as tt:
+            preview = tt.get_preview_tree()
+            self.assertEqual(wt.get_root_id(), preview.get_root_id())
+
     def test_create_rename(self):
         """Rename an inventory entry while creating the file"""
         tree =self.make_branch_and_tree('.')

=== modified file 'bzrlib/tests/test_shelf_ui.py'
--- a/bzrlib/tests/test_shelf_ui.py	2011-06-13 14:44:22 +0000
+++ b/bzrlib/tests/test_shelf_ui.py	2011-07-07 09:34:06 +0000
@@ -302,16 +302,19 @@
         finally:
             tree.unlock()
 
-    def test_shelve_old_root_deleted(self):
+    def test_shelve_old_root_preserved(self):
         tree1 = self.make_branch_and_tree('tree1')
         tree1.commit('add root')
+        tree1_root_id = tree1.get_root_id()
         tree2 = self.make_branch_and_tree('tree2')
         rev2 = tree2.commit('add root')
+        self.assertNotEquals(tree1_root_id, tree2.get_root_id())
         tree1.merge_from_branch(tree2.branch,
                                 from_revision=revision.NULL_REVISION)
-        tree1.commit('Replaced root entry')
+        tree1.commit('merging in tree2')
+        self.assertEquals(tree1_root_id, tree1.get_root_id())
         # This is essentially assertNotRaises(InconsistentDelta)
-        # With testtools 0.99, it can be rewritten as:
+        # With testtools 0.9.9, it can be rewritten as:
         # with ExpectedException(AssertionError,
         #                        'InconsistentDelta not raised'):
         #     with ExpectedException(errors.InconsistentDelta, ''):

=== modified file 'bzrlib/tests/test_transform.py'
--- a/bzrlib/tests/test_transform.py	2011-06-28 13:40:29 +0000
+++ b/bzrlib/tests/test_transform.py	2011-07-06 20:52:00 +0000
@@ -285,9 +285,24 @@
         new_trans_id = transform.new_directory('', ROOT_PARENT, 'alt-root-id')
         self.assertRaises(ValueError, transform.fixup_new_roots)
 
+    def test_retain_existing_root(self):
+        tt, root = self.get_transform()
+        with tt:
+            tt.new_directory('', ROOT_PARENT, 'new-root-id')
+            tt.fixup_new_roots()
+            self.assertNotEqual('new-root-id', tt.final_file_id(tt.root))
+
+    def test_retain_existing_root_added_file(self):
+        tt, root = self.get_transform()
+        new_trans_id = tt.new_directory('', ROOT_PARENT, 'new-root-id')
+        child = tt.new_directory('child', new_trans_id, 'child-id')
+        tt.fixup_new_roots()
+        self.assertEqual(tt.root, tt.final_parent(child))
+
     def test_add_unversioned_root(self):
         transform, root = self.get_transform()
         new_trans_id = transform.new_directory('', ROOT_PARENT, None)
+        transform.delete_contents(transform.root)
         transform.fixup_new_roots()
         self.assertNotIn(transform.root, transform._new_id)
 

=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py	2011-06-28 17:25:26 +0000
+++ b/bzrlib/transform.py	2011-07-06 20:52:00 +0000
@@ -243,13 +243,11 @@
             self._new_root = new_roots[0]
             return
         old_new_root = new_roots[0]
-        # TODO: What to do if a old_new_root is present, but self._new_root is
-        #       not listed as being removed? This code explicitly unversions
-        #       the old root and versions it with the new file_id. Though that
-        #       seems like an incomplete delta
-
         # unversion the new root's directory.
-        file_id = self.final_file_id(old_new_root)
+        if self.final_kind(self._new_root) is None:
+            file_id = self.final_file_id(old_new_root)
+        else:
+            file_id = self.final_file_id(self._new_root)
         if old_new_root in self._new_id:
             self.cancel_versioning(old_new_root)
         else:

=== modified file 'doc/en/release-notes/bzr-2.4.txt'
--- a/doc/en/release-notes/bzr-2.4.txt	2011-07-06 14:54:53 +0000
+++ b/doc/en/release-notes/bzr-2.4.txt	2011-07-07 09:34:06 +0000
@@ -142,10 +142,12 @@
   exception caused while running bzr serve.
   (Jonathan Riddell, #274578)
 
-
 * New hook set_commit_message in bzrlib.msgeditor to set a commit message
   and revision properties.  (Jonathan Riddell, #274578)
 
+* Preserve existing ``root-id`` when merging an unrelated branch.
+  (Aaron Bentley, #806356)
+
 * Support ``-S`` as an alias for ``--short`` for the ``log`` and
   ``missing`` commands. (Martin von Gagern, #38655)
 



More information about the bazaar-commits mailing list