Rev 4598: fix a critical bug #402778 in http://bazaar.launchpad.net/~jameinel/bzr/1.19-bug-402778

John Arbash Meinel john at arbash-meinel.com
Tue Aug 11 18:22:50 BST 2009


At http://bazaar.launchpad.net/~jameinel/bzr/1.19-bug-402778

------------------------------------------------------------
revno: 4598
revision-id: john at arbash-meinel.com-20090811172245-kzlpt9lxvrn0700o
parent: pqm at pqm.ubuntu.com-20090811040617-g99p5v2wsn13ww8z
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 1.19-bug-402778
timestamp: Tue 2009-08-11 12:22:45 -0500
message:
  fix a critical bug #402778
  
  When fetching into a stacked repository, InterDifferingSerializer would try to
  fill in parent inventories, but would actually create something invalid.
-------------- next part --------------
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2009-08-06 02:23:37 +0000
+++ b/bzrlib/repository.py	2009-08-11 17:22:45 +0000
@@ -3817,9 +3817,10 @@
             parent_ids.discard(_mod_revision.NULL_REVISION)
             parent_map = self.source.get_parent_map(parent_ids)
             for parent_tree in self.source.revision_trees(parent_ids):
-                basis_id, delta = self._get_delta_for_revision(tree, parent_ids, basis_id, cache)
                 current_revision_id = parent_tree.get_revision_id()
                 parents_parents = parent_map[current_revision_id]
+                basis_id, delta = self._get_delta_for_revision(parent_tree,
+                    parents_parents, basis_id, cache)
                 self.target.add_inventory_by_delta(
                     basis_id, delta, current_revision_id, parents_parents)
         # insert signatures and revisions

=== modified file 'bzrlib/tests/per_interrepository/test_fetch.py'
--- a/bzrlib/tests/per_interrepository/test_fetch.py	2009-07-10 06:46:10 +0000
+++ b/bzrlib/tests/per_interrepository/test_fetch.py	2009-08-11 17:22:45 +0000
@@ -139,10 +139,14 @@
         builder = self.make_branch_builder('branch')
         builder.start_series()
         builder.build_snapshot('base', None, [
-            ('add', ('', 'root-id', 'directory', ''))])
-        builder.build_snapshot('left', ['base'], [])
-        builder.build_snapshot('right', ['base'], [])
-        builder.build_snapshot('merge', ['left', 'right'], [])
+            ('add', ('', 'root-id', 'directory', '')),
+            ('add', ('file', 'file-id', 'file', 'content\n'))])
+        builder.build_snapshot('left', ['base'], [
+            ('modify', ('file-id', 'left content\n'))])
+        builder.build_snapshot('right', ['base'], [
+            ('modify', ('file-id', 'right content\n'))])
+        builder.build_snapshot('merge', ['left', 'right'], [
+            ('modify', ('file-id', 'left and right content\n'))])
         builder.finish_series()
         branch = builder.get_branch()
         repo = self.make_to_repository('trunk')
@@ -161,6 +165,18 @@
         self.assertEqual(
             set([('left',), ('right',), ('merge',)]),
             unstacked_repo.inventories.keys())
+        # And the basis inventories have been copied correctly
+        trunk.lock_read()
+        self.addCleanup(trunk.unlock)
+        left_tree, right_tree = trunk.repository.revision_trees(
+            ['left', 'right'])
+        stacked_branch.lock_read()
+        self.addCleanup(stacked_branch.unlock)
+        (stacked_left_tree,
+         stacked_right_tree) = stacked_branch.repository.revision_trees(
+            ['left', 'right'])
+        self.assertEqual(left_tree.inventory, stacked_left_tree.inventory)
+        self.assertEqual(right_tree.inventory, stacked_right_tree.inventory)
 
     def test_fetch_missing_basis_text(self):
         """If fetching a delta, we should die if a basis is not present."""



More information about the bazaar-commits mailing list