Rev 63: Update the Component api to take a format tuple. in http://people.ubuntu.com/~robertc/baz2.0/plugins/search/trunk
Robert Collins
robertc at robertcollins.net
Tue Dec 2 20:56:16 GMT 2008
At http://people.ubuntu.com/~robertc/baz2.0/plugins/search/trunk
------------------------------------------------------------
revno: 63
revision-id: robertc at robertcollins.net-20081202205604-307gpsaw7whse1b2
parent: robertc at robertcollins.net-20081202202212-wj8rpyqimf4rv0jm
committer: Robert Collins <robertc at robertcollins.net>
branch nick: trunk
timestamp: Wed 2008-12-03 07:56:04 +1100
message:
Update the Component api to take a format tuple.
modified:
index.py index.py-20080608055509-hnimeek7q8tctkqf-2
tests/test_index.py test_index.py-20080608055509-hnimeek7q8tctkqf-4
=== modified file 'index.py'
--- a/index.py 2008-12-02 20:22:12 +0000
+++ b/index.py 2008-12-02 20:56:04 +0000
@@ -361,7 +361,7 @@
for offset in range(groups):
outer_bar.update("Indexing...", offset, groups)
revision_group = order[offset * group_size:(offset + 1) * group_size]
- builder = ComponentIndexBuilder()
+ builder = ComponentIndexBuilder(self._format)
# here: index texts
# here: index inventory/paths
# here: index revisions
@@ -417,7 +417,7 @@
self._upload_transport.rename(element,
'../indices/' + element)
self._transport.put_file('names', new_names.finish())
- index = ComponentIndex(index_name, index_value,
+ index = ComponentIndex(self._format, index_name, index_value,
self._indices_transport)
self._orig_names[index_name] = (index_value, index)
# Cleanup obsoleted if needed, if we are removing things.
@@ -502,7 +502,8 @@
for name in added_names:
# TODO: byte length of the indices here.
value = new_names[name][0]
- component = ComponentIndex(name, value, self._indices_transport)
+ component = ComponentIndex(self._format, name, value,
+ self._indices_transport)
self._add_index_to_memory(name, value, component)
for name in deleted_names:
self._remove_component_from_memory(name)
@@ -880,18 +881,21 @@
class ComponentIndex(object):
"""A single component in the aggregate search index.
- Components are a collection of files (later, they will become single packs).
+ Components are a single pack containing:
The relevant files are:
- - a GraphIndex listing indexed revisions (name.rix)
- - a GraphIndex mapping terms to posting lists (name.tix)
- - a GraphIndex mapping document ids to document keys (name.dix)
+ - an index listing indexed revisions (name.rix)
+ - an index mapping terms to posting lists (name.tix)
+ - an index mapping document ids to document keys (name.dix)
- A posting-list per term (name.N) listing the document ids the term
indexes.
+
+ The index implementation is selected from the format tuple.
"""
- def __init__(self, name, value, transport):
+ def __init__(self, format, name, value, transport):
"""Create a ComponentIndex.
+ :param format: The format object for this bzr-search folder.
:param name: The name of the index.
:param value: The value string from the names list for this component.
"""
@@ -914,6 +918,7 @@
self.document_index = doc_index
self.name = name
self.transport = transport
+ self.format = format
def all_terms(self):
"""As per Index, but for a single component."""
@@ -997,12 +1002,13 @@
class ComponentIndexBuilder(ComponentCreator):
"""Creates a component index."""
- def __init__(self):
+ def __init__(self, format):
self.document_index = InMemoryGraphIndex(0, 1)
self._document_ids = {}
self.terms = {}
self.revision_index = InMemoryGraphIndex(0, 1)
self.posting_lists = {}
+ self.format = format
def add_term(self, term, posting_list):
"""Add a term to the index.
=== modified file 'tests/test_index.py'
--- a/tests/test_index.py 2008-12-02 20:22:12 +0000
+++ b/tests/test_index.py 2008-12-02 20:56:04 +0000
@@ -23,7 +23,26 @@
from bzrlib import log
from bzrlib.plugins import search
from bzrlib.plugins.search import errors, index
-from bzrlib.tests import TestCaseWithTransport
+from bzrlib.tests import (
+ adapt_tests,
+ condition_isinstance,
+ split_suite_by_condition,
+ TestCaseWithTransport,
+ TestScenarioApplier,
+ )
+
+
+def load_tests(basic_tests, module, test_loader):
+ """Parameterise the class tests to test all formats."""
+ component_tests, other_tests = split_suite_by_condition(basic_tests,
+ condition_isinstance((
+ TestComponentIndexBuilder,
+ TestComponentCombiner)))
+ adapter = TestScenarioApplier()
+ adapter.scenarios = [(format_string[:-1], {'format':format}) for
+ format_string, format in index._FORMATS.items()]
+ adapt_tests(component_tests, adapter, other_tests)
+ return other_tests
class TestIndex(TestCaseWithTransport):
@@ -416,7 +435,7 @@
class TestComponentIndexBuilder(TestCaseWithTransport):
def test_documents(self):
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
self.assertEqual("0", builder.add_document(('r', '', 'revid')))
self.assertEqual("1", builder.add_document(('r', '', 'other-revid')))
self.assertEqual("0", builder.add_document(('r', '', 'revid')))
@@ -426,7 +445,7 @@
(doc_index, ("1",), "r other-revid")], nodes)
def test_posting_list(self):
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
# adding a term adds its documents
builder.add_term(("term1",), [('r', '', 'revid'),
('r', '', 'other-revid')])
@@ -462,7 +481,7 @@
self.assertEqual(set(["0", "2"]), set(builder.posting_list(("term2",))))
def test_2_term_posting_list(self):
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
# adding a term adds its documents
builder.add_term(("term1", "term12"), [('r', '', 'revid'),
('r', '', 'other-revid')])
@@ -505,7 +524,7 @@
self.assertEqual(set(), set(builder.posting_list(("term2",))))
def test_add_revision(self):
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
# adding a revision lists the revision, does not alter document keys
# etc.
builder.add_revision('foo')
@@ -522,7 +541,7 @@
# create one component:
transport = self.get_transport()
components = []
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
builder.add_revision('rev1')
builder.add_revision('rev-common')
builder.add_term(("term1",), [('r', '', 'rev1'),
@@ -531,20 +550,20 @@
('r', '', 'rev-common')])
builder.add_term(("term", "complex"), [('f', 'foo', 'rev1')])
name, value, elements = builder.upload_index(transport)
- component1 = index.ComponentIndex(name, value, transport)
+ component1 = index.ComponentIndex(self.format, name, value, transport)
components.append(component1)
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
builder.add_revision('rev-common')
builder.add_revision('rev2')
builder.add_term(("term-common",), [('r', '', 'rev2'),
('r', '', 'rev-common')])
builder.add_term(("term2",), [('r', '', 'rev2'), ('r', '', 'other-revid')])
name, value, elements = builder.upload_index(transport)
- component2 = index.ComponentIndex(name, value, transport)
+ component2 = index.ComponentIndex(self.format, name, value, transport)
components.append(component2)
combiner = index.ComponentCombiner(components, transport)
name, value, elements = combiner.combine()
- combined = index.ComponentIndex(name, value, transport)
+ combined = index.ComponentIndex(self.format, name, value, transport)
terms = {}
terms[('term-common',)] = set([('r', '', 'rev-common'),
('r', '', 'rev1'), ('r', '', 'rev2')])
@@ -559,20 +578,20 @@
# create one component:
transport = self.get_transport()
components = []
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
builder.add_revision('revid')
builder.add_term(("file", "revid"), [('p', '', 'file path')])
name, value, elements = builder.upload_index(transport)
- component1 = index.ComponentIndex(name, value, transport)
+ component1 = index.ComponentIndex(self.format, name, value, transport)
components.append(component1)
- builder = index.ComponentIndexBuilder()
+ builder = index.ComponentIndexBuilder(self.format)
builder.add_revision('revid1')
name, value, elements = builder.upload_index(transport)
- component2 = index.ComponentIndex(name, value, transport)
+ component2 = index.ComponentIndex(self.format, name, value, transport)
components.append(component2)
combiner = index.ComponentCombiner(components, transport)
name, value, elements = combiner.combine()
- combined = index.ComponentIndex(name, value, transport)
+ combined = index.ComponentIndex(self.format, name, value, transport)
terms = {('file', 'revid'): set([('p', '', 'file path')])}
self.assertEqual(terms, combined.all_terms())
self.assertEqual(set([('revid',), ('revid1',)]),
More information about the bazaar-commits
mailing list