[PATCH 06 of 10 V2] context: remove duplicate manifest creation during _buildstatus

Martin von Zweigbergk martinvonz at google.com
Wed Mar 8 13:21:51 EST 2017


On Tue, Mar 7, 2017 at 7:22 PM, Durham Goode <durham at fb.com> wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1488937790 28800
> #      Tue Mar 07 17:49:50 2017 -0800
> # Node ID d2850df6c891a20585a0d5eac370c1c2f4463cad
> # Parent  36bcc5d848c6bdf33d604999631a0708d1b7f067
> context: remove duplicate manifest creation during _buildstatus
>
> Previously we called self.manifest() in some cases to preload the first
> manifest. It turns out that self.manifest() may do extra logic that
> _manifestmatches() does not, so it may be causing us extra work. The fix is to
> just only do the work once.
>
> diff --git a/mercurial/context.py b/mercurial/context.py
> --- a/mercurial/context.py
> +++ b/mercurial/context.py
> @@ -117,10 +117,12 @@ class basectx(object):
>          # 1000 and cache it so that when you read 1001, we just need to apply a
>          # delta to what's in the cache. So that's one full reconstruction + one
>          # delta application.
> +        mf2 = None
>          if self.rev() is not None and self.rev() < other.rev():
> -            self.manifest()
> +            mf2 = self._manifestmatches(match, s)
>          mf1 = other._manifestmatches(match, s)
> -        mf2 = self._manifestmatches(match, s)
> +        if mf2 is None:
> +            mf2 = self._manifestmatches(match, s)

There seems to be three cases here that are relevant to this patch:

1. self.rev() is None (i.e. this is a workingctx)
2. self.rev() < other.rev()
3. self.rev >= other.rev()

Which case is it that may do extra logic before? And in which ctx
class? I've spent some trying to find it without success.

>
>          modified, added = [], []
>          removed = []
> _______________________________________________
> 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