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