Rev 5997: (jelmer) Re-introduce root when merge result is empty tree. (Jelmer Vernooij) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Tue Jun 28 15:58:23 UTC 2011


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 5997 [merge]
revision-id: pqm at pqm.ubuntu.com-20110628155820-g1hpzbqc5573rts5
parent: pqm at pqm.ubuntu.com-20110628151559-dvc0trfnmfux4roq
parent: jelmer at samba.org-20110628134029-trs1drm9b32350nh
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Tue 2011-06-28 15:58:20 +0000
message:
  (jelmer) Re-introduce root when merge result is empty tree. (Jelmer Vernooij)
modified:
  bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
  bzrlib/tests/test_merge.py     testmerge.py-20050905070950-c1b5aa49ff911024
  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
=== modified file 'bzrlib/merge.py'
--- a/bzrlib/merge.py	2011-06-21 22:02:33 +0000
+++ b/bzrlib/merge.py	2011-06-28 15:58:20 +0000
@@ -1966,7 +1966,7 @@
     """
     if this_tree is None:
         raise errors.BzrError("bzrlib.merge.merge_inner requires a this_tree "
-                              "parameter as of bzrlib version 0.8.")
+                              "parameter")
     merger = Merger(this_branch, other_tree, base_tree, this_tree=this_tree,
                     pb=pb, change_reporter=change_reporter)
     merger.backup_files = backup_files

=== modified file 'bzrlib/tests/test_merge.py'
--- a/bzrlib/tests/test_merge.py	2011-06-09 18:56:55 +0000
+++ b/bzrlib/tests/test_merge.py	2011-06-28 13:40:29 +0000
@@ -490,6 +490,24 @@
         finally:
             tree_file.close()
 
+    def test_merge_require_tree_root(self):
+        tree = self.make_branch_and_tree(".")
+        tree.lock_write()
+        self.addCleanup(tree.unlock)
+        self.build_tree(['a'])
+        tree.add('a')
+        tree.commit("added a")
+        old_root_id = tree.get_root_id()
+        first_rev = tree.branch.revision_history()[0]
+        merger = _mod_merge.Merger.from_revision_ids(None, tree,
+                                          _mod_revision.NULL_REVISION,
+                                          first_rev)
+        merger.merge_type = _mod_merge.Merge3Merger
+        conflict_count = merger.do_merge()
+        self.assertEqual(0, conflict_count)
+        self.assertEquals(set([old_root_id]), tree.all_file_ids())
+        tree.set_parent_ids([])
+
     def test_merge_add_into_deleted_root(self):
         # Yes, people actually do this.  And report bugs if it breaks.
         source = self.make_branch_and_tree('source', format='rich-root-pack')

=== modified file 'bzrlib/tests/test_transform.py'
--- a/bzrlib/tests/test_transform.py	2011-06-13 16:25:08 +0000
+++ b/bzrlib/tests/test_transform.py	2011-06-28 13:40:29 +0000
@@ -291,6 +291,21 @@
         transform.fixup_new_roots()
         self.assertNotIn(transform.root, transform._new_id)
 
+    def test_remove_root_fixup(self):
+        transform, root = self.get_transform()
+        old_root_id = self.wt.get_root_id()
+        self.assertNotEqual('new-root-id', old_root_id)
+        transform.delete_contents(root)
+        transform.unversion_file(root)
+        transform.fixup_new_roots()
+        transform.apply()
+        self.assertEqual(old_root_id, self.wt.get_root_id())
+
+        transform, root = self.get_transform()
+        new_trans_id = transform.new_directory('', ROOT_PARENT, 'new-root-id')
+        new_trans_id = transform.new_directory('', ROOT_PARENT, 'alt-root-id')
+        self.assertRaises(ValueError, transform.fixup_new_roots)
+
     def test_apply_retains_root_directory(self):
         # Do not attempt to delete the physical root directory, because that
         # is impossible.

=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py	2011-06-21 15:19:18 +0000
+++ b/bzrlib/transform.py	2011-06-28 15:58:20 +0000
@@ -226,10 +226,16 @@
         This means that the old root trans-id becomes obsolete, so it is
         recommended only to invoke this after the root trans-id has become
         irrelevant.
+
         """
         new_roots = [k for k, v in self._new_parent.iteritems() if v is
                      ROOT_PARENT]
         if len(new_roots) < 1:
+            if self.final_kind(self.root) is None:
+                self.cancel_deletion(self.root)
+            if self.final_file_id(self.root) is None:
+                self.version_file(self.tree_file_id(self.root),
+                                     self.root)
             return
         if len(new_roots) != 1:
             raise ValueError('A tree cannot have two roots!')

=== modified file 'doc/en/release-notes/bzr-2.4.txt'
--- a/doc/en/release-notes/bzr-2.4.txt	2011-06-28 13:55:39 +0000
+++ b/doc/en/release-notes/bzr-2.4.txt	2011-06-28 15:58:20 +0000
@@ -42,6 +42,9 @@
 * ``GraphThunkIdsToKeys.merge_sort`` now properly returns
   keys rather than ids. (Jelmer Vernooij, #799677)
 
+* ``TreeTransformBase.fixup_new_roots`` can now check that a tree root
+  is present. (Jelmer Vernooij, #801257)
+
 .. Fixes for situations where bzr would previously crash or give incorrect
    or undesirable results.
 




More information about the bazaar-commits mailing list