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