From patchwork Tue Mar 28 07:49:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [7, of, 7] revlog: avoid apply delta chain when cache hit in revlog.revision From: Jun Wu X-Patchwork-Id: 19777 Message-Id: <8c9f728ef3a3fff029d7.1490687348@localhost.localdomain> To: Date: Tue, 28 Mar 2017 00:49:08 -0700 # HG changeset patch # User Jun Wu # Date 1490683696 25200 # Mon Mar 27 23:48:16 2017 -0700 # Node ID 8c9f728ef3a3fff029d7fe6c875ed783c66dc254 # Parent d3d803ed16fe8e9d43f7a4daeca079e4022c297a # Available At https://bitbucket.org/quark-zju/hg-draft # hg pull https://bitbucket.org/quark-zju/hg-draft -r 8c9f728ef3a3 revlog: avoid apply delta chain when cache hit in revlog.revision Previously, revlog.revision(raw=False) may try to apply the delta chain even on cache hit. That could happen if flags are non-empty so all fast paths won't be executed. But if cache hit, the raw test is still useful. So let's use it. diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1259,19 +1259,20 @@ class revlog(object): cachedrev = None flags = None + text = None if node == nullid: return "" if self._cache: if self._cache[0] == node: + text = self._cache[2] if raw: - return self._cache[2] + return text if rev is None: rev = self.rev(node) flags = self.flags(rev) if not flags: - return self._cache[2] + return text cachedrev = self._cache[1] # look up what we need to read - text = None if rev is None: rev = self.rev(node)