Rev 3648: Change GraphIndex to also have a _get_nodes_by_key in http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/index_builder_cleanup

John Arbash Meinel john at arbash-meinel.com
Mon Aug 25 17:29:03 BST 2008


At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/index_builder_cleanup

------------------------------------------------------------
revno: 3648
revision-id: john at arbash-meinel.com-20080825162901-1qweamxqdvv59ie9
parent: john at arbash-meinel.com-20080825162409-0766y19zjs45m87i
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: index_builder_cleanup
timestamp: Mon 2008-08-25 11:29:01 -0500
message:
  Change GraphIndex to also have a _get_nodes_by_key
modified:
  bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
-------------- next part --------------
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py	2008-08-25 16:24:09 +0000
+++ b/bzrlib/index.py	2008-08-25 16:29:01 +0000
@@ -95,6 +95,28 @@
             if not element or _whitespace_re.search(element) is not None:
                 raise errors.BadIndexKey(element)
 
+    def _get_nodes_by_key(self):
+        if self._nodes_by_key is None:
+            nodes_by_key = {}
+            if self.reference_lists:
+                for key, (absent, references, value) in self._nodes.iteritems():
+                    if absent:
+                        continue
+                    key_dict = nodes_by_key
+                    for subkey in key[:-1]:
+                        key_dict = key_dict.setdefault(subkey, {})
+                    key_dict[key[-1]] = key, value, references
+            else:
+                for key, (absent, references, value) in self._nodes.iteritems():
+                    if absent:
+                        continue
+                    key_dict = nodes_by_key
+                    for subkey in key[:-1]:
+                        key_dict = key_dict.setdefault(subkey, {})
+                    key_dict[key[-1]] = key, value
+            self._nodes_by_key = nodes_by_key
+        return self._nodes_by_key
+
     def _update_nodes_by_key(self, key, value, node_refs):
         """Update the _nodes_by_key dict with a new key.
 
@@ -1154,14 +1176,6 @@
     available - for example via a CombinedGraphIndex.
     """
 
-    def __init__(self, reference_lists=0, key_elements=1):
-        super(InMemoryGraphIndex, self).__init__(
-            reference_lists=reference_lists,
-            key_elements=key_elements)
-        # The tests using InMemoryGraphIndex expect _nodes_by_key to be filled
-        # out
-        self._nodes_by_key = {}
-
     def add_nodes(self, nodes):
         """Add nodes to the index.
 
@@ -1250,6 +1264,7 @@
                 else:
                     yield self, key, node[2]
             return
+        nodes_by_key = self._get_nodes_by_key()
         for key in keys:
             # sanity check
             if key[0] is None:
@@ -1257,7 +1272,7 @@
             if len(key) != self._key_length:
                 raise errors.BadIndexKey(key)
             # find what it refers to:
-            key_dict = self._nodes_by_key
+            key_dict = nodes_by_key
             elements = list(key)
             # find the subdict to return
             try:



More information about the bazaar-commits mailing list