Rev 6012: (vila) Merging unrelated trees prefers THIS root (Aaron Bentley) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Thu Jul 7 10:56:22 UTC 2011
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 6012 [merge]
revision-id: pqm at pqm.ubuntu.com-20110707105619-6tftefqyt2zlmho5
parent: pqm at pqm.ubuntu.com-20110706145453-tuhya3x9udlu1lmx
parent: v.ladeuil+lp at free.fr-20110707101207-6pmr7hhtqh1wqdd6
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2011-07-07 10:56:19 +0000
message:
(vila) Merging unrelated trees prefers THIS root (Aaron Bentley)
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
=== 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