[PATCH 3 of 3 V2] revlog: avoid applying delta chain on cache hit
Augie Fackler
raf at durin42.com
Mon Apr 3 16:18:46 EDT 2017
On Sun, Apr 02, 2017 at 06:43:01PM -0700, Jun Wu wrote:
> # HG changeset patch
> # User Jun Wu <quark at fb.com>
> # Date 1491183613 25200
> # Sun Apr 02 18:40:13 2017 -0700
> # Node ID 8324b03f08a91fd039ee83428b86792374640b89
> # Parent e5669675e4f24e98c99165c112fa81db66ff6094
> # Available At https://bitbucket.org/quark-zju/hg-draft
queued, thanks
> # hg pull https://bitbucket.org/quark-zju/hg-draft -r 8324b03f08a9
> revlog: avoid applying delta chain on cache hit
>
> Previously, revlog.revision(raw=False) may try to apply the delta chain
> on _cache hit. That happens if flags are non-empty. This patch makes rawtext
> reused so delta chain application is avoided.
>
> "_cache" and "rev" are moved a bit to avoid unnecessary assignments.
>
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -1269,4 +1269,5 @@ class revlog(object):
> cachedrev = None
> flags = None
> + rawtext = None
> if node == nullid:
> return ""
> @@ -1284,9 +1285,10 @@ class revlog(object):
> if flags == REVIDX_DEFAULT_FLAGS:
> return self._cache[2]
> + # rawtext is reusable. need to run flag processor
> + rawtext = self._cache[2]
>
> cachedrev = self._cache[1]
>
> # look up what we need to read
> - rawtext = None
> if rawtext is None:
> if rev is None:
> @@ -1306,6 +1308,9 @@ class revlog(object):
>
> rawtext = mdiff.patches(rawtext, bins)
> + self._cache = (node, rev, rawtext)
>
> if flags is None:
> + if rev is None:
> + rev = self.rev(node)
> flags = self.flags(rev)
>
> @@ -1314,5 +1319,4 @@ class revlog(object):
> self.checkhash(text, node, rev=rev)
>
> - self._cache = (node, rev, rawtext)
> return text
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list