Rev 4192: Fix creating new revisions of files when merging. in http://people.ubuntu.com/~robertc/baz2.0/pending/commit-uses-ric
Robert Collins
robertc at robertcollins.net
Mon Mar 30 06:00:08 BST 2009
At http://people.ubuntu.com/~robertc/baz2.0/pending/commit-uses-ric
------------------------------------------------------------
revno: 4192
revision-id: robertc at robertcollins.net-20090330045950-wlj0oy051wuy3mrg
parent: robertc at robertcollins.net-20090327043658-vzfmwbuhd7pam1m7
committer: Robert Collins <robertc at robertcollins.net>
branch nick: commit-uses-ric
timestamp: Mon 2009-03-30 15:59:50 +1100
message:
Fix creating new revisions of files when merging.
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2009-03-27 04:10:25 +0000
+++ b/bzrlib/repository.py 2009-03-30 04:59:50 +0000
@@ -610,12 +610,21 @@
continue
if change[2] not in merged_ids:
if change[0] is not None:
+ basis_entry = basis_inv[change[2]]
merged_ids[change[2]] = [
- basis_inv[change[2]].revision,
+ # basis revid
+ basis_entry.revision,
+ # new tree revid
change[3].revision]
+ parent_entries[change[2]] = {
+ # basis parent
+ basis_entry.revision:basis_entry,
+ # this parent
+ change[3].revision:change[3],
+ }
else:
merged_ids[change[2]] = [change[3].revision]
- parent_entries[change[2]] = {change[3].revision:change[3]}
+ parent_entries[change[2]] = {change[3].revision:change[3]}
else:
merged_ids[change[2]].append(change[3].revision)
parent_entries[change[2]][change[3].revision] = change[3]
=== modified file 'bzrlib/tests/per_repository/test_commit_builder.py'
--- a/bzrlib/tests/per_repository/test_commit_builder.py 2009-03-27 04:10:25 +0000
+++ b/bzrlib/tests/per_repository/test_commit_builder.py 2009-03-30 04:59:50 +0000
@@ -1035,20 +1035,31 @@
# Make a merge which just incorporates a change from a branch:
# The per-file graph is straight line, and no alteration occurs
# in the inventory.
+ # Part 1: change in the merged branch.
rev1, tree2 = self._commit_sprout(tree1, name)
# change on the other side to merge back
rev2 = self._rename_in_tree(tree2, name)
tree1.merge_from_branch(tree2.branch)
if mini_commit is None:
mini_commit = self.mini_commit
- rev3 = mini_commit(tree1, name, 'new_' + name, False)
- tree3, = self._get_revtrees(tree1, [rev2])
- self.assertEqual(rev2, tree3.inventory[name + 'id'].revision)
- file_id = name + 'id'
- expected_graph = {}
- expected_graph[(file_id, rev1)] = ()
- expected_graph[(file_id, rev2)] = ((file_id, rev1),)
- self.assertFileGraph(expected_graph, tree1, (file_id, rev2))
+ def _check_graph(in_tree, changed_in_tree):
+ rev3 = mini_commit(in_tree, name, 'new_' + name, False,
+ delta_against_basis=changed_in_tree)
+ tree3, = self._get_revtrees(in_tree, [rev2])
+ self.assertEqual(rev2, tree3.inventory[name + 'id'].revision)
+ file_id = name + 'id'
+ expected_graph = {}
+ expected_graph[(file_id, rev1)] = ()
+ expected_graph[(file_id, rev2)] = ((file_id, rev1),)
+ self.assertFileGraph(expected_graph, in_tree, (file_id, rev2))
+ _check_graph(tree1, True)
+ # Part 2: change in the merged into branch - we use tree2 that has a
+ # change to name, branch tree1 and give it an unrelated change, then
+ # merge that to t2.
+ other_tree = tree1.bzrdir.sprout('t3').open_workingtree()
+ other_rev = other_tree.commit('')
+ tree2.merge_from_branch(other_tree.branch)
+ _check_graph(tree2, False)
def _commit_sprout_make_merge(self, tree1, make, mini_commit=None):
# Make a merge which incorporates the addition of a new object to
More information about the bazaar-commits
mailing list