--- a/mercurial/revlog.py Thu Apr 12 20:22:18 2012 -0500
+++ b/mercurial/revlog.py Thu Apr 12 14:05:59 2012 -0700
@@ -174,7 +174,7 @@
def parseindex(self, data, inline):
# call the C implementation to parse the index data
index, cache = parsers.parse_index2(data, inline)
- return index, None, cache
+ return index, getattr(index, 'nodemap', None), cache
def packentry(self, entry, node, version, rev):
p = _pack(indexformatng, *entry)
@@ -295,10 +295,21 @@
except KeyError:
return False
+ def clearcaches(self):
+ try:
+ self._nodecache.clearcaches()
+ except AttributeError:
+ self._nodecache = {nullid: nullrev}
+ self._nodepos = None
+
def rev(self, node):
try:
return self._nodecache[node]
+ except RevlogError:
+ # parsers.c radix tree lookup failed
+ raise LookupError(node, self.indexfile, _('no node'))
except KeyError:
+ # pure python cache lookup failed
n = self._nodecache
i = self.index
p = self._nodepos