Rev 3535: Handle when an entry is missing in THIS in http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/merge_lca_multi
John Arbash Meinel
john at arbash-meinel.com
Tue Jul 22 22:57:45 BST 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/merge_lca_multi
------------------------------------------------------------
revno: 3535
revision-id: john at arbash-meinel.com-20080722215639-vtsdwysizs2m28k6
parent: john at arbash-meinel.com-20080722214713-xpdvsv1aixxq05tn
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: merge_lca_multi
timestamp: Tue 2008-07-22 16:56:39 -0500
message:
Handle when an entry is missing in THIS
-------------- next part --------------
=== modified file 'bzrlib/merge.py'
--- a/bzrlib/merge.py 2008-07-22 21:47:13 +0000
+++ b/bzrlib/merge.py 2008-07-22 21:56:39 +0000
@@ -678,17 +678,24 @@
base_executable = base_ie.executable
else:
base_parent_id = base_name = base_executable = None
- this_ie = self.this_tree.inventory[file_id]
+ if file_id in this_inventory:
+ this_ie = this_inventory[file_id]
+ this_parent_id = this_ie.parent_id
+ this_name = this_ie.name
+ this_executable = this_ie.executable
+ else:
+ this_parent_id = this_name = this_executable = None
+
result.append((file_id, True,
((base_parent_id,
[ie.parent_id for path, ie in lca_values]),
- other_ie.parent_id, this_ie.parent_id),
+ other_ie.parent_id, this_parent_id),
((base_name,
[ie.name for path, ie in lca_values]),
- other_ie.name, this_ie.name),
+ other_ie.name, this_name),
((base_executable,
[ie.executable for path, ie in lca_values]),
- other_ie.executable, this_ie.executable)
+ other_ie.executable, this_executable)
))
return result
=== modified file 'bzrlib/tests/test_merge.py'
--- a/bzrlib/tests/test_merge.py 2008-07-22 21:47:13 +0000
+++ b/bzrlib/tests/test_merge.py 2008-07-22 21:56:39 +0000
@@ -1105,7 +1105,7 @@
self.kwargs = kwargs
-class TestMergerInMemory(TestCaseWithMemoryTransport):
+class TestMergerBase(TestCaseWithMemoryTransport):
"""Tests for Merger that can be done without hitting disk."""
def get_builder(self):
@@ -1153,6 +1153,9 @@
merger.merge_type = _mod_merge.Merge3Merger
return merger
+
+class TestMergerInMemory(TestMergerBase):
+
def test_find_base(self):
merger = self.make_Merger(self.setup_simple_graph(), 'C-id')
self.assertEqual('A-id', merger.base_rev_id)
@@ -1202,7 +1205,14 @@
self.assertIsInstance(merge_obj, UnsupportedLCATreesMerger)
self.assertFalse('lca_trees' in merge_obj.kwargs)
- def test__entries_lca_simple(self):
+
+class TestMergerEntriesLCA(TestMergerBase):
+
+ def make_merge_obj(self, builder, other_revision_id):
+ merger = self.make_Merger(builder, other_revision_id)
+ return merger.make_merger()
+
+ def test_simple(self):
builder = self.get_builder()
builder.build_snapshot('A-id', None,
[('add', (u'', 'a-root-id', 'directory', None)),
@@ -1215,10 +1225,10 @@
[('modify', ('a-id', 'a\nB\nb\nC\nc\nE\n'))])
builder.build_snapshot('D-id', ['B-id', 'C-id'],
[('modify', ('a-id', 'a\nB\nb\nC\nc\n'))])
- merger = self.make_Merger(builder, 'E-id')
- merge_obj = merger.make_merger()
+ merge_obj = self.make_merge_obj(builder, 'E-id')
self.assertEqual(['B-id', 'C-id'], sorted(merge_obj._lca_trees.keys()))
+ self.assertEqual('A-id', merge_obj.base_tree.get_revision_id())
entries = list(merge_obj._entries_lca())
# (file_id, changed, parents, names, executable)
@@ -1234,7 +1244,7 @@
((False, [False, False]), False, False)),
], entries)
- def test__entries_lca_not_in_base(self):
+ def test_not_in_base(self):
# LCA's all have the same last-modified revision for the file, as do
# the tips, but the base has something different
# A base, doesn't have the file
@@ -1260,9 +1270,10 @@
builder.build_snapshot('G-id', ['E-id', 'D-id'],
[('modify', (u'bar-id', 'd\ne\nf\nG\n'))])
builder.build_snapshot('F-id', ['D-id', 'E-id'], [])
- merger = self.make_Merger(builder, 'G-id')
- merge_obj = merger.make_merger()
+ merge_obj = self.make_merge_obj(builder, 'G-id')
+ self.assertEqual(['D-id', 'E-id'], sorted(merge_obj._lca_trees.keys()))
+ self.assertEqual('A-id', merge_obj.base_tree.get_revision_id())
entries = list(merge_obj._entries_lca())
# Ignore the root entry, as it looks like it is always modified when it
# really isn't
@@ -1274,6 +1285,37 @@
((None, [u'bar', u'bar']), u'bar', u'bar'),
((None, [False, False]), False, False)),
], entries)
+
+ def test_not_in_this(self):
+ builder = self.get_builder()
+ builder.build_snapshot('A-id', None,
+ [('add', (u'', 'a-root-id', 'directory', None)),
+ ('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))])
+ builder.build_snapshot('C-id', ['A-id'],
+ [('modify', ('a-id', 'a\nb\nC\nc\n'))])
+ builder.build_snapshot('B-id', ['A-id'],
+ [('modify', ('a-id', 'a\nB\nb\nc\n'))])
+ builder.build_snapshot('E-id', ['C-id', 'B-id'],
+ [('modify', ('a-id', 'a\nB\nb\nC\nc\nE\n'))])
+ builder.build_snapshot('D-id', ['B-id', 'C-id'],
+ [('unversion', 'a-id')])
+ merge_obj = self.make_merge_obj(builder, 'E-id')
+
+ self.assertEqual(['B-id', 'C-id'], sorted(merge_obj._lca_trees.keys()))
+ self.assertEqual('A-id', merge_obj.base_tree.get_revision_id())
+
+ entries = list(merge_obj._entries_lca())
+ # Ignore the root entry, as it looks like it is always modified when it
+ # really isn't
+ root = entries.pop(0)
+ self.assertEqual('a-root-id', root[0])
+ root_id = 'a-root-id'
+ self.assertEqual([('a-id', True,
+ ((root_id, [root_id, root_id]), root_id, None),
+ ((u'a', [u'a', u'a']), u'a', None),
+ ((False, [False, False]), False, None)),
+ ], entries)
+
# TODO: cases to test
# simple criss-cross LCAS identical, BASE different
# x-x changed from BASE but identical for all LCAs and tips
More information about the bazaar-commits
mailing list