Rev 2622: Absent entries are not yeilded. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Fri Jul 13 12:24:57 BST 2007


At http://people.ubuntu.com/~robertc/baz2.0/repository

------------------------------------------------------------
revno: 2622
revision-id: robertc at robertcollins.net-20070713112454-dsj464911g0l8wpa
parent: robertc at robertcollins.net-20070713112045-o30wjumnx9ueyoz4
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Fri 2007-07-13 21:24:54 +1000
message:
  Absent entries are not yeilded.
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 11:20:45 +0000
+++ b/bzrlib/index.py	2007-07-13 11:24:54 +0000
@@ -170,6 +170,8 @@
     Each node has the same number of key reference lists. Each key reference
     list can be empty or an arbitrary length. The value is an opaque NULL
     terminated string without any newlines.
+
+    It is presumed that the index will not be mutated - it is static data.
     """
 
     def __init__(self, transport, name):
@@ -191,7 +193,7 @@
         stream = self._transport.get(self._name)
         self._read_prefix(stream)
         line_count = 0
-        keys_by_offset = {}
+        self.keys_by_offset = {}
         trailers = 0
         pos = stream.tell()
         for line in stream.readlines():
@@ -205,14 +207,16 @@
                     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)
+            self.keys_by_offset[pos] = (key, absent, ref_lists, value)
             pos += len(line)
-        for key, absent, references, value in keys_by_offset.values():
+        for key, absent, references, value in self.keys_by_offset.values():
+            if absent:
+                continue
             # 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.append(tuple([self.keys_by_offset[ref][0] for ref in ref_list]))
                 node_refs = tuple(node_refs)
             else:
                 node_refs = ()

=== modified file 'bzrlib/tests/test_index.py'
--- a/bzrlib/tests/test_index.py	2007-07-13 11:20:45 +0000
+++ b/bzrlib/tests/test_index.py	2007-07-13 11:24:54 +0000
@@ -249,6 +249,15 @@
             ('ref', ((), ), 'refdata')]),
             set(index.iter_all_entries()))
 
+    def test_iteration_absent_skipped(self):
+        index = self.make_index(1, nodes=[
+            ('name', (['ref'], ), 'data')])
+        self.assertEqual(set([('name', (('ref',),), 'data')]),
+            set(index.iter_all_entries()))
+        self.assertEqual(set([('name', (('ref',),), 'data')]),
+            set(index.iter_entries(['name'])))
+        self.assertRaises(errors.MissingKey, list, index.iter_entries(['ref']))
+
     def test_iter_nothing_empty(self):
         index = self.make_index(1, nodes=[
             ('name', (['ref'], ), 'data'),




More information about the bazaar-commits mailing list