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