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