Rev 3725: Cherrypick the graph index _get_nodes_by_key fix in http://bzr.arbash-meinel.com/branches/bzr/1.8-dev/lighter_log_file_simple

John Arbash Meinel john at arbash-meinel.com
Mon Sep 22 21:15:39 BST 2008


At http://bzr.arbash-meinel.com/branches/bzr/1.8-dev/lighter_log_file_simple

------------------------------------------------------------
revno: 3725
revision-id: john at arbash-meinel.com-20080922201515-gusj2wwxbxcdqbg1
parent: john at arbash-meinel.com-20080919013023-31adhm4mt3obrjst
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: lighter_log_file_simple
timestamp: Mon 2008-09-22 15:15:15 -0500
message:
  Cherrypick the graph index _get_nodes_by_key fix
-------------- next part --------------
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py	2008-09-19 01:30:23 +0000
+++ b/bzrlib/index.py	2008-09-22 20:15:15 +0000
@@ -387,6 +387,24 @@
             # there must be one line - the empty trailer line.
             raise errors.BadIndexData(self)
 
+    def _get_nodes_by_key(self):
+        if self._nodes_by_key is None:
+            nodes_by_key = {}
+            if self.node_ref_lists:
+                for key, (value, references) in self._nodes.iteritems():
+                    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, value in self._nodes.iteritems():
+                    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 iter_all_entries(self):
         """Iterate over all keys within the index.
 
@@ -579,6 +597,7 @@
                 else:
                     yield self, key, self._nodes[key]
             return
+        nodes_by_key = self._get_nodes_by_key()
         for key in keys:
             # sanity check
             if key[0] is None:
@@ -586,7 +605,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 whose contents should be returned.
             try:



More information about the bazaar-commits mailing list