Rev 3732: Fix GraphIndex to properly generate _nodes_by_keys on demand. in http://bzr.arbash-meinel.com/branches/bzr/1.8-dev/lighter_log_file

John Arbash Meinel john at arbash-meinel.com
Sun Sep 21 15:48:59 BST 2008


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

------------------------------------------------------------
revno: 3732
revision-id: john at arbash-meinel.com-20080921144837-wi61tf7gr4jfwl5d
parent: john at arbash-meinel.com-20080921141555-r6npeijzl5ic1r6r
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: lighter_log_file
timestamp: Sun 2008-09-21 09:48:37 -0500
message:
  Fix GraphIndex to properly generate _nodes_by_keys on demand.
-------------- next part --------------
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py	2008-09-19 01:30:23 +0000
+++ b/bzrlib/index.py	2008-09-21 14:48:37 +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