Rev 3387: Stacked insert_record_stream. in http://people.ubuntu.com/~robertc/baz2.0/shallow-branch
Robert Collins
robertc at robertcollins.net
Tue Jun 24 13:03:21 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/shallow-branch
------------------------------------------------------------
revno: 3387
revision-id: robertc at robertcollins.net-20080624120313-hyh4pr14fxzkpbs2
parent: robertc at robertcollins.net-20080623044500-szw4ohqv0lxy44yk
committer: Robert Collins <robertc at robertcollins.net>
branch nick: stacking-knits
timestamp: Tue 2008-06-24 22:03:13 +1000
message:
Stacked insert_record_stream.
modified:
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/tests/test_knit.py test_knit.py-20051212171302-95d4c00dd5f11f2b
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2008-06-23 04:45:00 +0000
+++ b/bzrlib/knit.py 2008-06-24 12:03:13 +0000
@@ -1005,7 +1005,9 @@
bytes = record.get_bytes_as('fulltext')
lines = split_lines(record.get_bytes_as('fulltext'))
text_map[record.key] = lines
- final_content[record.key] = PlainKnitContent(lines, record.key)
+ content_map[record.key] = PlainKnitContent(lines, record.key)
+ if record.key in keys:
+ final_content[record.key] = content_map[record.key]
for key in keys:
if key in nonlocal_keys:
# already handled
@@ -1013,11 +1015,16 @@
components = []
cursor = key
while cursor is not None:
- record, record_details, digest, next = record_map[cursor]
+ try:
+ record, record_details, digest, next = record_map[cursor]
+ except KeyError:
+ raise RevisionNotPresent(cursor, self)
components.append((cursor, record, record_details, digest))
+ cursor = next
if cursor in content_map:
+ # no need to plan further back
+ components.append((cursor, None, None, None))
break
- cursor = next
content = None
for (component_id, record, record_details,
@@ -1156,7 +1163,8 @@
chain.append(positions[chain[-1]][2])
except KeyError:
# missing basis component
- result = False
+ needed_from_fallback.add(chain[-1])
+ result = True
break
for chain_key in chain[:-1]:
checked_keys[chain_key] = result
=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py 2008-06-23 04:45:00 +0000
+++ b/bzrlib/tests/test_knit.py 2008-06-24 12:03:13 +0000
@@ -1653,7 +1653,25 @@
basis.calls)
def test_insert_record_stream(self):
- pass
+ # records are inserted as normal; insert_record_stream builds on
+ # add_lines, so a smoke test should be all thats needed:
+ key = ('foo',)
+ key_basis = ('bar',)
+ key_delta = ('zaphod',)
+ basis, test = self.get_basis_and_test_knit()
+ source = self.make_test_knit(name='source')
+ basis.add_lines(key_basis, (), ['foo\n'])
+ basis.calls = []
+ source.add_lines(key_basis, (), ['foo\n'])
+ source.add_lines(key_delta, (key_basis,), ['bar\n'])
+ stream = source.get_record_stream([key_delta], 'unordered', False)
+ test.insert_record_stream(stream)
+ self.assertEqual([("get_parent_map", set([key_basis]))],
+ basis.calls)
+ self.assertEqual({key_delta:(key_basis,)},
+ test.get_parent_map([key_delta]))
+ self.assertEqual('bar\n', test.get_record_stream([key_delta],
+ 'unordered', True).next().get_bytes_as('fulltext'))
def test_iter_lines_added_or_present_in_keys(self):
# Lines from the basis are returned, and lines for a given key are only
More information about the bazaar-commits
mailing list