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