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