diff -r 9bce7ed50c9a -r ff84cd2bdfaf mercurial/revlog.py --- a/mercurial/revlog.py Thu Aug 19 23:13:20 2010 +0200 +++ b/mercurial/revlog.py Fri Aug 20 00:17:50 2010 +0200 @@ -1056,26 +1056,30 @@ def revision(self, node): """return an uncompressed revision of a given node""" - cache = nullrev + cachedrev = nullrev if node == nullid: return "" if self._cache: - cache = self._cache[1] if self._cache[0] == node: return self._cache[2] + cachedrev = self._cache[1] # look up what we need to read text = None rev = self.rev(node) - cache, base, chain = self.deltachain(rev, cache) + base = self.base(rev) # check rev flags if self.flags(rev) & ~REVIDX_KNOWN_FLAGS: raise RevlogError(_('incompatible revision flag %x') % (self.flags(rev) & ~REVIDX_KNOWN_FLAGS)) + # build delta chain + self._loadindex(base, rev + 1) + cachehit, base, chain = self.deltachain(rev, cachedrev) + # do we have useful data cached? - if cache and self._cache: + if cachehit and self._cache: global _cached _cached += 1 text = self._cache[2] @@ -1087,7 +1091,6 @@ # drop cache to save memory self._cache = None - self._loadindex(base, rev + 1) self._chunkraw(base, rev) if text is None: text = self._chunk(base)