Rev 6025: Small TreeTransform fixes (Aaron Bentley). in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Thu Jul 14 13:52:23 UTC 2011


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

------------------------------------------------------------
revno: 6025 [merge]
revision-id: pqm at pqm.ubuntu.com-20110714135221-785gbmtlr9zmlifl
parent: pqm at pqm.ubuntu.com-20110712154328-y17bvllaw2rh0997
parent: aaron at aaronbentley.com-20110713173615-90c2gw3rpzeq8cbm
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2011-07-14 13:52:21 +0000
message:
  Small TreeTransform fixes (Aaron Bentley).
modified:
  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.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
=== modified file 'bzrlib/tests/test_merge.py'
--- a/bzrlib/tests/test_merge.py	2011-07-08 07:38:03 +0000
+++ b/bzrlib/tests/test_merge.py	2011-07-13 16:02:32 +0000
@@ -137,26 +137,15 @@
 
     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')
+        other_tree = self.make_branch_and_tree('other')
+        self.addCleanup(other_tree.lock_read().unlock)
         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())
+        with transform.TransformPreview(wt) as merger.tt:
+            merger._compute_transform()
+            new_root_id = merger.tt.final_file_id(merger.tt.root)
+            self.assertEqual(wt.get_root_id(), new_root_id)
 
     def test_create_rename(self):
         """Rename an inventory entry while creating the file"""

=== modified file 'bzrlib/tests/test_transform.py'
--- a/bzrlib/tests/test_transform.py	2011-07-06 20:52:00 +0000
+++ b/bzrlib/tests/test_transform.py	2011-07-13 15:21:48 +0000
@@ -321,6 +321,14 @@
         new_trans_id = transform.new_directory('', ROOT_PARENT, 'alt-root-id')
         self.assertRaises(ValueError, transform.fixup_new_roots)
 
+    def test_fixup_new_roots_permits_empty_tree(self):
+        transform, root = self.get_transform()
+        transform.delete_contents(root)
+        transform.unversion_file(root)
+        transform.fixup_new_roots()
+        self.assertIs(None, transform.final_kind(root))
+        self.assertIs(None, transform.final_file_id(root))
+
     def test_apply_retains_root_directory(self):
         # Do not attempt to delete the physical root directory, because that
         # is impossible.
@@ -332,6 +340,13 @@
                                   transform.apply)
         self.assertContainsRe('TransformRenameFailed not raised', str(e))
 
+    def test_apply_retains_file_id(self):
+        transform, root = self.get_transform()
+        old_root_id = transform.tree_file_id(root)
+        transform.unversion_file(root)
+        transform.apply()
+        self.assertEqual(old_root_id, self.wt.get_root_id())
+
     def test_hardlink(self):
         self.requireFeature(HardlinkFeature)
         transform, root = self.get_transform()

=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py	2011-07-06 20:52:00 +0000
+++ b/bzrlib/transform.py	2011-07-13 15:21:48 +0000
@@ -231,11 +231,6 @@
         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!')
@@ -1753,6 +1748,8 @@
                 mover.apply_deletions()
         finally:
             child_pb.finished()
+        if self.final_file_id(self.root) is None:
+            inventory_delta = [e for e in inventory_delta if e[0] != '']
         self._tree.apply_inventory_delta(inventory_delta)
         self._apply_observed_sha1s()
         self._done = True

=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt	2011-07-12 14:30:06 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt	2011-07-13 17:36:15 +0000
@@ -41,6 +41,10 @@
 .. Fixes for situations where bzr would previously crash or give incorrect
    or undesirable results.
 
+* TreeTransformBase.fixup_new_roots no longer forces trees to have a root, so
+  operations that use it, like merge, can now create trees without a root.
+  (Aaron Bentley)
+
 Documentation
 *************
 




More information about the bazaar-commits mailing list