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