Rev 2638: Make GraphIndex accept nodes as key, value, references, so that the method in http://people.ubuntu.com/~robertc/baz2.0/index

Robert Collins robertc at robertcollins.net
Sun Jul 15 16:42:04 BST 2007


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

------------------------------------------------------------
revno: 2638
revision-id: robertc at robertcollins.net-20070715154037-3ar8g89decddc9su
parent: robertc at robertcollins.net-20070715073137-cd9kb764q4e40o0f
committer: Robert Collins <robertc at robertcollins.net>
branch nick: index
timestamp: Mon 2007-07-16 01:40:37 +1000
message:
  Make GraphIndex accept nodes as key, value, references, so that the method
  signature is closer to what a simple key->value index delivers. Also
  change the behaviour when the reference list count is zero to accept
  key, value as nodes, and emit key, value to make it identical in that case
  to a simple key->value index. This may not be a good idea, but for now it
  seems ok.
modified:
  bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
  bzrlib/tests/test_index.py     test_index.py-20070712131115-lolkarso50vjr64s-2
  doc/developers/indices.txt     indices.txt-20070713142939-m5cdnp31u8ape0td-1
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py	2007-07-15 07:31:37 +0000
+++ b/bzrlib/index.py	2007-07-15 15:40:37 +0000
@@ -64,7 +64,7 @@
         self.reference_lists = reference_lists
         self._nodes = {}
 
-    def add_node(self, key, references, value):
+    def add_node(self, key, value, references=()):
         """Add a node to the index.
 
         :param key: The key. keys must be whitespace-free utf8.
@@ -200,9 +200,11 @@
     def iter_all_entries(self):
         """Iterate over all keys within the index.
 
-        :return: An iterable of (key, reference_lists, value). There is no
-            defined order for the result iteration - it will be in the most
-            efficient order for the index.
+        :return: An iterable of (key, value) or (key, value, reference_lists).
+            The former tuple is used when there are no reference lists in the
+            index, making the API compatible with simple key:value index types.
+            There is no defined order for the result iteration - it will be in
+            the most efficient order for the index.
         """
         stream = self._transport.get(self._name)
         self._read_prefix(stream)
@@ -232,10 +234,9 @@
                 node_refs = []
                 for ref_list in references:
                     node_refs.append(tuple([self.keys_by_offset[ref][0] for ref in ref_list]))
-                node_refs = tuple(node_refs)
+                yield (key, value, tuple(node_refs))
             else:
-                node_refs = ()
-            yield (key, node_refs, value)
+                yield (key, value)
         if trailers != 1:
             # there must be one line - the empty trailer line.
             raise errors.BadIndexData(self)
@@ -256,9 +257,9 @@
         """Iterate over keys within the index.
 
         :param keys: An iterable providing the keys to be retrieved.
-        :return: An iterable of (key, reference_lists, value). There is no
-            defined order for the result iteration - it will be in the most
-            efficient order for the index.
+        :return: An iterable as per iter_all_entries, but restricted to the
+            keys supplied. No additional keys will be returned, and every
+            key supplied that is in the index will be returned.
         """
         keys = set(keys)
         if not keys:
@@ -364,8 +365,8 @@
 
         :param nodes: An iterable of (key, node_refs, value) entries to add.
         """
-        for (key, node_refs, value) in nodes:
-            self.add_node(key, node_refs, value)
+        for (key, value, node_refs) in nodes:
+            self.add_node(key, value, node_refs)
 
     def iter_all_entries(self):
         """Iterate over all keys within the index
@@ -374,9 +375,14 @@
             defined order for the result iteration - it will be in the most
             efficient order for the index (in this case dictionary hash order).
         """
-        for key, (absent, references, value) in self._nodes.iteritems():
-            if not absent:
-                yield key, references, value
+        if self.reference_lists:
+            for key, (absent, references, value) in self._nodes.iteritems():
+                if not absent:
+                    yield key, value, references
+        else:
+            for key, (absent, references, value) in self._nodes.iteritems():
+                if not absent:
+                    yield key, value
 
     def iter_entries(self, keys):
         """Iterate over keys within the index.
@@ -387,10 +393,16 @@
             efficient order for the index (keys iteration order in this case).
         """
         keys = set(keys)
-        for key in keys.intersection(self._nodes):
-            node = self._nodes[key]
-            if not node[0]:
-                yield key, node[1], node[2]
+        if self.reference_lists:
+            for key in keys.intersection(self._nodes):
+                node = self._nodes[key]
+                if not node[0]:
+                    yield key, node[2], node[1]
+        else:
+            for key in keys.intersection(self._nodes):
+                node = self._nodes[key]
+                if not node[0]:
+                    yield key, node[2]
 
     def validate(self):
         """In memory index's have no known corruption at the moment."""

=== modified file 'bzrlib/tests/test_index.py'
--- a/bzrlib/tests/test_index.py	2007-07-15 04:45:19 +0000
+++ b/bzrlib/tests/test_index.py	2007-07-15 15:40:37 +0000
@@ -41,9 +41,17 @@
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\n\n", contents)
 
-    def test_build_index_one_node(self):
-        builder = GraphIndexBuilder()
-        builder.add_node('akey', (), 'data')
+    def test_build_index_one_node_no_refs(self):
+        builder = GraphIndexBuilder()
+        builder.add_node('akey', 'data')
+        stream = builder.finish()
+        contents = stream.read()
+        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\n"
+            "akey\x00\x00\x00data\n\n", contents)
+
+    def test_build_index_one_node_no_refs_accepts_empty_reflist(self):
+        builder = GraphIndexBuilder()
+        builder.add_node('akey', 'data', ())
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\n"
@@ -51,7 +59,7 @@
 
     def test_add_node_empty_value(self):
         builder = GraphIndexBuilder()
-        builder.add_node('akey', (), '')
+        builder.add_node('akey', '')
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\n"
@@ -63,9 +71,9 @@
         # use three to have a good chance of glitching dictionary hash
         # lookups etc. Insert in randomish order that is not correct
         # and not the reverse of the correct order.
-        builder.add_node('2002', (), 'data')
-        builder.add_node('2000', (), 'data')
-        builder.add_node('2001', (), 'data')
+        builder.add_node('2002', 'data')
+        builder.add_node('2000', 'data')
+        builder.add_node('2001', 'data')
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\n"
@@ -76,7 +84,7 @@
 
     def test_build_index_reference_lists_are_included_one(self):
         builder = GraphIndexBuilder(reference_lists=1)
-        builder.add_node('key', ([], ), 'data')
+        builder.add_node('key', 'data', ([], ))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\n"
@@ -85,7 +93,7 @@
 
     def test_build_index_reference_lists_are_included_two(self):
         builder = GraphIndexBuilder(reference_lists=2)
-        builder.add_node('key', ([], []), 'data')
+        builder.add_node('key', 'data', ([], []))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\n"
@@ -94,8 +102,8 @@
 
     def test_node_references_are_byte_offsets(self):
         builder = GraphIndexBuilder(reference_lists=1)
-        builder.add_node('reference', ([], ), 'data')
-        builder.add_node('key', (['reference'], ), 'data')
+        builder.add_node('reference', 'data', ([], ))
+        builder.add_node('key', 'data', (['reference'], ))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\n"
@@ -105,9 +113,9 @@
 
     def test_node_references_are_cr_delimited(self):
         builder = GraphIndexBuilder(reference_lists=1)
-        builder.add_node('reference', ([], ), 'data')
-        builder.add_node('reference2', ([], ), 'data')
-        builder.add_node('key', (['reference', 'reference2'], ), 'data')
+        builder.add_node('reference', 'data', ([], ))
+        builder.add_node('reference2', 'data', ([], ))
+        builder.add_node('key', 'data', (['reference', 'reference2'], ))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\n"
@@ -118,8 +126,8 @@
 
     def test_multiple_reference_lists_are_tab_delimited(self):
         builder = GraphIndexBuilder(reference_lists=2)
-        builder.add_node('keference', ([], []), 'data')
-        builder.add_node('rey', (['keference'], ['keference']), 'data')
+        builder.add_node('keference', 'data', ([], []))
+        builder.add_node('rey', 'data', (['keference'], ['keference']))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\n"
@@ -129,7 +137,7 @@
 
     def test_add_node_referencing_missing_key_makes_absent(self):
         builder = GraphIndexBuilder(reference_lists=1)
-        builder.add_node('rey', (['beference', 'aeference2'], ), 'data')
+        builder.add_node('rey', 'data', (['beference', 'aeference2'], ))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\n"
@@ -142,7 +150,7 @@
         # test the node digit expands as needed.
         builder = GraphIndexBuilder(reference_lists=1)
         references = map(str, reversed(range(9)))
-        builder.add_node('2-key', (references, ), '')
+        builder.add_node('2-key', '', (references, ))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\n"
@@ -162,7 +170,7 @@
         # the offsets after an absent record should be correct when there are
         # >1 reference lists.
         builder = GraphIndexBuilder(reference_lists=2)
-        builder.add_node('parent', (['aail', 'zther'], []), '')
+        builder.add_node('parent', '', (['aail', 'zther'], []))
         stream = builder.finish()
         contents = stream.read()
         self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\n"
@@ -175,66 +183,68 @@
         builder = GraphIndexBuilder()
         for bad_char in '\t\n\x0b\x0c\r\x00 ':
             self.assertRaises(errors.BadIndexKey, builder.add_node,
-                'a%skey' % bad_char, (), 'data')
+                'a%skey' % bad_char, 'data')
         self.assertRaises(errors.BadIndexKey, builder.add_node,
-                '', (), 'data')
+                '', 'data')
 
     def test_add_node_bad_data(self):
         builder = GraphIndexBuilder()
         self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            (), 'data\naa')
+            'data\naa')
         self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            (), 'data\x00aa')
+            'data\x00aa')
 
     def test_add_node_bad_mismatched_ref_lists_length(self):
         builder = GraphIndexBuilder()
         self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            ([], ), 'data aa')
+            'data aa', ([], ))
         builder = GraphIndexBuilder(reference_lists=1)
         self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            (), 'data aa')
-        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            ([], []), 'data aa')
+            'data aa')
+        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
+            'data aa', (), )
+        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
+            'data aa', ([], []))
         builder = GraphIndexBuilder(reference_lists=2)
         self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            (), 'data aa')
-        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            ([], ), 'data aa')
-        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
-            ([], [], []), 'data aa')
+            'data aa')
+        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
+            'data aa', ([], ))
+        self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
+            'data aa', ([], [], []))
 
     def test_add_node_bad_key_in_reference_lists(self):
         # first list, first key - trivial
         builder = GraphIndexBuilder(reference_lists=1)
         self.assertRaises(errors.BadIndexKey, builder.add_node, 'akey',
-            (['a key'], ), 'data aa')
+            'data aa', (['a key'], ))
         # need to check more than the first key in the list
         self.assertRaises(errors.BadIndexKey, builder.add_node, 'akey',
-            (['agoodkey', 'this is a bad key'], ), 'data aa')
+            'data aa', (['agoodkey', 'this is a bad key'], ))
         # and if there is more than one list it should be getting checked
         # too
         builder = GraphIndexBuilder(reference_lists=2)
         self.assertRaises(errors.BadIndexKey, builder.add_node, 'akey',
-            ([], ['a bad key']), 'data aa')
+            'data aa', ([], ['a bad key']))
 
     def test_add_duplicate_key(self):
         builder = GraphIndexBuilder()
-        builder.add_node('key', (), 'data')
+        builder.add_node('key', 'data')
         self.assertRaises(errors.BadIndexDuplicateKey, builder.add_node, 'key',
-            (), 'data')
+            'data')
 
     def test_add_key_after_referencing_key(self):
         builder = GraphIndexBuilder(reference_lists=1)
-        builder.add_node('key', (['reference'], ), 'data')
-        builder.add_node('reference', ([],), 'data')
+        builder.add_node('key', 'data', (['reference'], ))
+        builder.add_node('reference', 'data', ([],))
 
 
 class TestGraphIndex(TestCaseWithMemoryTransport):
 
     def make_index(self, ref_lists=0, nodes=[]):
         builder = GraphIndexBuilder(ref_lists)
-        for node, references, value in nodes:
-            builder.add_node(node, references, value)
+        for node, value, references in nodes:
+            builder.add_node(node, value, references)
         stream = builder.finish()
         trans = self.get_transport()
         trans.put_file('index', stream)
@@ -250,33 +260,33 @@
         self.assertEqual([], list(index.iter_all_entries()))
 
     def test_iter_all_entries_simple(self):
-        index = self.make_index(nodes=[('name', (), 'data')])
-        self.assertEqual([('name', (), 'data')],
+        index = self.make_index(nodes=[('name', 'data', ())])
+        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')]),
+            ('name', 'data', (['ref'], )),
+            ('ref', 'refdata', ([], ))])
+        self.assertEqual(set([('name', 'data', (('ref',),)),
+            ('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')]),
+            ('name', 'data', (['ref'], ))])
+        self.assertEqual(set([('name', 'data', (('ref',),))]),
             set(index.iter_all_entries()))
-        self.assertEqual(set([('name', (('ref',),), 'data')]),
+        self.assertEqual(set([('name', 'data', (('ref',),))]),
             set(index.iter_entries(['name'])))
         self.assertEqual([], list(index.iter_entries(['ref'])))
 
     def test_iter_all_keys(self):
         index = self.make_index(1, nodes=[
-            ('name', (['ref'], ), 'data'),
-            ('ref', ([], ), 'refdata')])
-        self.assertEqual(set([('name', (('ref',),), 'data'),
-            ('ref', ((), ), 'refdata')]),
+            ('name', 'data', (['ref'], )),
+            ('ref', 'refdata', ([], ))])
+        self.assertEqual(set([('name', 'data', (('ref',),)),
+            ('ref', 'refdata', ((), ))]),
             set(index.iter_entries(['name', 'ref'])))
 
     def test_iter_nothing_empty(self):
@@ -311,7 +321,7 @@
         self.assertRaises(errors.BadIndexData, index.validate)
 
     def test_validate_missing_end_line_nonempty(self):
-        index = self.make_index(2, [('key', ([], []), '')])
+        index = self.make_index(2, [('key', '', ([], []))])
         trans = self.get_transport()
         content = trans.get_bytes('index')
         # truncate the last byte
@@ -323,7 +333,7 @@
         index.validate()
 
     def test_validate_no_refs_content(self):
-        index = self.make_index(nodes=[('key', (), 'value')])
+        index = self.make_index(nodes=[('key', 'value', ())])
         index.validate()
 
 
@@ -331,8 +341,8 @@
 
     def make_index(self, name, ref_lists=0, nodes=[]):
         builder = GraphIndexBuilder(ref_lists)
-        for node, references, value in nodes:
-            builder.add_node(node, references, value)
+        for node, value, references in nodes:
+            builder.add_node(node, value, references)
         stream = builder.finish()
         trans = self.get_transport()
         trans.put_file(name, stream)
@@ -345,9 +355,9 @@
 
     def test_add_index(self):
         index = CombinedGraphIndex([])
-        index1 = self.make_index('name', nodes=[('key', (), '')])
+        index1 = self.make_index('name', 0, nodes=[('key', '', ())])
         index.insert_index(0, index1)
-        self.assertEqual([('key', (), '')], list(index.iter_all_entries()))
+        self.assertEqual([('key', '')], list(index.iter_all_entries()))
 
     def test_iter_all_entries_empty(self):
         index = CombinedGraphIndex([])
@@ -359,31 +369,31 @@
         self.assertEqual([], list(index.iter_all_entries()))
 
     def test_iter_all_entries_simple(self):
-        index1 = self.make_index('name', nodes=[('name', (), 'data')])
+        index1 = self.make_index('name', nodes=[('name', 'data', ())])
         index = CombinedGraphIndex([index1])
-        self.assertEqual([('name', (), 'data')],
+        self.assertEqual([('name', 'data')],
             list(index.iter_all_entries()))
 
     def test_iter_all_entries_two_indices(self):
-        index1 = self.make_index('name1', nodes=[('name', (), 'data')])
-        index2 = self.make_index('name2', nodes=[('2', (), '')])
+        index1 = self.make_index('name1', nodes=[('name', 'data', ())])
+        index2 = self.make_index('name2', nodes=[('2', '', ())])
         index = CombinedGraphIndex([index1, index2])
-        self.assertEqual([('name', (), 'data'),
-            ('2', (), '')],
+        self.assertEqual([('name', 'data'),
+            ('2', '')],
             list(index.iter_all_entries()))
 
     def test_iter_entries_two_indices_dup_key(self):
-        index1 = self.make_index('name1', nodes=[('name', (), 'data')])
-        index2 = self.make_index('name2', nodes=[('name', (), 'data')])
+        index1 = self.make_index('name1', nodes=[('name', 'data', ())])
+        index2 = self.make_index('name2', nodes=[('name', 'data', ())])
         index = CombinedGraphIndex([index1, index2])
-        self.assertEqual([('name', (), 'data')],
+        self.assertEqual([('name', 'data')],
             list(index.iter_entries(['name'])))
 
     def test_iter_all_entries_two_indices_dup_key(self):
-        index1 = self.make_index('name1', nodes=[('name', (), 'data')])
-        index2 = self.make_index('name2', nodes=[('name', (), 'data')])
+        index1 = self.make_index('name1', nodes=[('name', 'data', ())])
+        index2 = self.make_index('name2', nodes=[('name', 'data', ())])
         index = CombinedGraphIndex([index1, index2])
-        self.assertEqual([('name', (), 'data')],
+        self.assertEqual([('name', 'data')],
             list(index.iter_all_entries()))
 
     def test_iter_nothing_empty(self):
@@ -397,23 +407,23 @@
 
     def test_iter_all_keys(self):
         index1 = self.make_index('1', 1, nodes=[
-            ('name', (['ref'], ), 'data')])
+            ('name', 'data', (['ref'], ))])
         index2 = self.make_index('2', 1, nodes=[
-            ('ref', ([], ), 'refdata')])
+            ('ref', 'refdata', ((), ))])
         index = CombinedGraphIndex([index1, index2])
-        self.assertEqual(set([('name', (('ref',),), 'data'),
-            ('ref', ((), ), 'refdata')]),
+        self.assertEqual(set([('name', 'data', (('ref', ), )),
+            ('ref', 'refdata', ((), ))]),
             set(index.iter_entries(['name', 'ref'])))
  
     def test_iter_all_keys_dup_entry(self):
         index1 = self.make_index('1', 1, nodes=[
-            ('name', (['ref'], ), 'data'),
-            ('ref', ([], ), 'refdata')])
+            ('name', 'data', (['ref'], )),
+            ('ref', 'refdata', ([], ))])
         index2 = self.make_index('2', 1, nodes=[
-            ('ref', ([], ), 'refdata')])
+            ('ref', 'refdata', ([], ))])
         index = CombinedGraphIndex([index1, index2])
-        self.assertEqual(set([('name', (('ref',),), 'data'),
-            ('ref', ((), ), 'refdata')]),
+        self.assertEqual(set([('name', 'data', (('ref',),)),
+            ('ref', 'refdata', ((), ))]),
             set(index.iter_entries(['name', 'ref'])))
  
     def test_iter_missing_entry_empty(self):
@@ -432,14 +442,14 @@
         self.assertEqual([], list(index.iter_entries(['a'])))
  
     def test_iter_entry_present_one_index_only(self):
-        index1 = self.make_index('1', nodes=[('key', (), '')])
+        index1 = self.make_index('1', nodes=[('key', '', ())])
         index2 = self.make_index('2', nodes=[])
         index = CombinedGraphIndex([index1, index2])
-        self.assertEqual([('key', (), '')],
+        self.assertEqual([('key', '')],
             list(index.iter_entries(['key'])))
         # and in the other direction
         index = CombinedGraphIndex([index2, index1])
-        self.assertEqual([('key', (), '')],
+        self.assertEqual([('key', '')],
             list(index.iter_entries(['key'])))
 
     def test_validate_bad_child_index_errors(self):
@@ -463,12 +473,12 @@
 
     def test_add_nodes(self):
         index = self.make_index(1)
-        index.add_nodes([('name', ([],), 'data')])
-        index.add_nodes([('name2', ([],), ''), ('name3', (['r'],), '')])
+        index.add_nodes([('name', 'data', ([],))])
+        index.add_nodes([('name2', '', ([],)), ('name3', '', (['r'],))])
         self.assertEqual(set([
-            ('name', ((),), 'data'),
-            ('name2', ((),), ''),
-            ('name3', (('r',),), ''),
+            ('name', 'data', ((),)),
+            ('name2', '', ((),)),
+            ('name3', '', (('r',),)),
             ]), set(index.iter_all_entries()))
 
     def test_iter_all_entries_empty(self):
@@ -476,33 +486,33 @@
         self.assertEqual([], list(index.iter_all_entries()))
 
     def test_iter_all_entries_simple(self):
-        index = self.make_index(nodes=[('name', (), 'data')])
-        self.assertEqual([('name', (), 'data')],
+        index = self.make_index(nodes=[('name', 'data', ())])
+        self.assertEqual([('name', 'data')],
             list(index.iter_all_entries()))
 
     def test_iter_all_entries_references(self):
         index = self.make_index(1, nodes=[
-            ('name', (['ref'], ), 'data'),
-            ('ref', ([], ), 'refdata')])
-        self.assertEqual(set([('name', (('ref',),), 'data'),
-            ('ref', ((), ), 'refdata')]),
+            ('name', 'data', (['ref'], )),
+            ('ref', 'refdata', ([], ))])
+        self.assertEqual(set([('name', 'data', (('ref',),)),
+            ('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')]),
+            ('name', 'data', (['ref'], ))])
+        self.assertEqual(set([('name', 'data', (('ref',),))]),
             set(index.iter_all_entries()))
-        self.assertEqual(set([('name', (('ref',),), 'data')]),
+        self.assertEqual(set([('name', 'data', (('ref',),))]),
             set(index.iter_entries(['name'])))
         self.assertEqual([], list(index.iter_entries(['ref'])))
 
     def test_iter_all_keys(self):
         index = self.make_index(1, nodes=[
-            ('name', (['ref'], ), 'data'),
-            ('ref', ([], ), 'refdata')])
-        self.assertEqual(set([('name', (('ref',),), 'data'),
-            ('ref', ((), ), 'refdata')]),
+            ('name', 'data', (['ref'], )),
+            ('ref', 'refdata', ([], ))])
+        self.assertEqual(set([('name', 'data', (('ref',),)),
+            ('ref', 'refdata', ((), ))]),
             set(index.iter_entries(['name', 'ref'])))
 
     def test_iter_nothing_empty(self):
@@ -518,7 +528,7 @@
         index.validate()
 
     def test_validate_no_refs_content(self):
-        index = self.make_index(nodes=[('key', (), 'value')])
+        index = self.make_index(nodes=[('key', 'value', ())])
         index.validate()
 
 

=== modified file 'doc/developers/indices.txt'
--- a/doc/developers/indices.txt	2007-07-15 07:31:37 +0000
+++ b/doc/developers/indices.txt	2007-07-15 15:40:37 +0000
@@ -49,9 +49,9 @@
 signatures to operate would strive to keep the signatures and return
 values as similar as possible. e.g.::
 
-    GraphIndexBuilder - add_node(key, references, value)
+    GraphIndexBuilder - add_node(key, value, references)
     IndexBuilder - add_node(key, value)
-    WhackyIndexBuilder - add_node(key, whackiness, value)
+    WhackyIndexBuilder - add_node(key, value, whackiness)
 
 as opposed to something quite different like::
 



More information about the bazaar-commits mailing list