# HG changeset patch # User Jun Wu # Date 2017-03-30 22:34:08 # Node ID 2133437dad174cabab4c23a937d550e04b2f9424 # Parent f319981c24c95d7a1019f7c8a49cbc50afa7c35c revlog: fix _cache usage in revision() As documented at revlog.__init__, revlog._cache stores raw text. The current read and write usage of "_cache" in revlog.revision lacks of raw=True check. This patch fixes that by adding check about raw, and storing rawtext explicitly in _cache. Note: it may slow down cache hit code path when raw=False and flags=0. That performance issue will be fixed in a later patch. test-revlog-raw now points us to a new problem. diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1267,7 +1267,9 @@ class revlog(object): return "" if self._cache: if self._cache[0] == node: - return self._cache[2] + # _cache only stores rawtext + if raw: + return self._cache[2] cachedrev = self._cache[1] # look up what we need to read @@ -1294,7 +1296,7 @@ class revlog(object): if validatehash: self.checkhash(text, node, rev=rev) - self._cache = (node, rev, text) + self._cache = (node, rev, rawtext) return text def hash(self, text, p1, p2): diff --git a/tests/test-revlog-raw.py.out b/tests/test-revlog-raw.py.out --- a/tests/test-revlog-raw.py.out +++ b/tests/test-revlog-raw.py.out @@ -1,1 +1,1 @@ -abort: rev 5: wrong text +abort: crashed: integrity check failed on _testrevlog.i:11