Rev 2620: Basic two pass iter_all_entries. in http://people.ubuntu.com/~robertc/baz2.0/repository
Robert Collins
robertc at robertcollins.net
Fri Jul 13 12:12:10 BST 2007
At http://people.ubuntu.com/~robertc/baz2.0/repository
------------------------------------------------------------
revno: 2620
revision-id: robertc at robertcollins.net-20070713111207-z0yrxo3g83bv5pp7
parent: robertc at robertcollins.net-20070713102922-v3ge2itsa8460o6i
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Fri 2007-07-13 21:12:07 +1000
message:
Basic two pass iter_all_entries.
modified:
bzrlib/index.py index.py-20070712131115-lolkarso50vjr64s-1
bzrlib/tests/test_index.py test_index.py-20070712131115-lolkarso50vjr64s-2
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py 2007-07-13 10:29:22 +0000
+++ b/bzrlib/index.py 2007-07-13 11:12:07 +0000
@@ -199,9 +199,24 @@
trailers += 1
continue
key, absent, references, value = line[:-1].split('\0')
- keys_by_offset[pos] = (key, absent, references, value)
+ ref_lists = []
+ for ref_string in references.split('\t'):
+ ref_lists.append(tuple([
+ int(ref) for ref in ref_string.split('\r') if ref
+ ]))
+ ref_lists = tuple(ref_lists)
+ keys_by_offset[pos] = (key, absent, ref_lists, value)
+ pos += len(line)
for key, absent, references, value in keys_by_offset.values():
- yield (key, (), value)
+ # resolve references:
+ if self.node_ref_lists:
+ node_refs = []
+ for ref_list in references:
+ node_refs.append(tuple([keys_by_offset[ref][0] for ref in ref_list]))
+ node_refs = tuple(node_refs)
+ else:
+ node_refs = ()
+ yield (key, node_refs, value)
if trailers != 1:
# there must be one line - the empty trailer line.
raise errors.BadIndexData(self)
=== modified file 'bzrlib/tests/test_index.py'
--- a/bzrlib/tests/test_index.py 2007-07-13 10:29:22 +0000
+++ b/bzrlib/tests/test_index.py 2007-07-13 11:12:07 +0000
@@ -241,6 +241,14 @@
self.assertEqual([('name', (), 'data')],
list(index.iter_all_entries()))
+ def test_iter_all_entries_references_resolved(self):
+ index = self.make_index(1, nodes=[
+ ('name', (['ref'], ), 'data'),
+ ('ref', ([], ), 'refdata')])
+ self.assertEqual(set([('name', (('ref',),), 'data'),
+ ('ref', ((), ), 'refdata')]),
+ set(index.iter_all_entries()))
+
def test_iter_nothing_empty(self):
index = self.make_index()
self.assertEqual([], list(index.iter_entries([])))
More information about the bazaar-commits
mailing list