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