[PATCH 3 of 6] merge: remove uses of manifest.matches
Martin von Zweigbergk
martinvonz at google.com
Tue Mar 7 19:41:47 EST 2017
On Fri, Mar 3, 2017 at 11:34 AM, Durham Goode <durham at fb.com> wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1488519936 28800
> # Thu Mar 02 21:45:36 2017 -0800
> # Node ID 883bb49a3b40609074d56257aab7619f0c306efc
> # Parent 4cebdd029399cf7c3b0fff73faf1f41af0e895d1
> merge: remove uses of manifest.matches
>
> This gets rid of the manifest.matches calls in merge.py in favor of the new api.
> This is part of getting rid of manifest.matches since it is O(manifest).
>
> diff --git a/mercurial/merge.py b/mercurial/merge.py
> --- a/mercurial/merge.py
> +++ b/mercurial/merge.py
> @@ -818,11 +818,7 @@ def manifestmerge(repo, wctx, p2, pa, br
> if any(wctx.sub(s).dirty() for s in wctx.substate):
> m1['.hgsubstate'] = modifiednodeid
>
> - # Compare manifests
> - if matcher is not None:
> - m1 = m1.matches(matcher)
> - m2 = m2.matches(matcher)
> - diff = m1.diff(m2)
> + diff = m1.diff(m2, match=matcher)
>
> actions = {}
> for f, ((n1, fl1), (n2, fl2)) in diff.iteritems():
> @@ -858,7 +854,7 @@ def manifestmerge(repo, wctx, p2, pa, br
> pass # we'll deal with it on m2 side
> elif f in movewithdir: # directory rename, move local
> f2 = movewithdir[f]
> - if f2 in m2:
> + if f2 in m2 and (not matcher or matcher(f2)):
Would it be easier to set matcher = match.always(...) (or however you
create such matchers) when matcher is None, so we don't have to check
in 4 places?
Also, will it be better to swap the order of the conditions to "if
matcher(f2) and f2 in m2" to avoid loading some treemanifests if
matcher(f2) is false? I guess we can change that later if it turns out
to be better.
(For this case the lazy manifest.match() approach would have been mean
cleaner. It's a little unfortunate that we have to remember to check
the matcher ever time, but I don't see a better way of doing it.)
> actions[f2] = ('m', (f, f2, None, True, pa.node()),
> "remote directory rename, both created")
> else:
> @@ -887,7 +883,7 @@ def manifestmerge(repo, wctx, p2, pa, br
> pass # we'll deal with it on m1 side
> elif f in movewithdir:
> f2 = movewithdir[f]
> - if f2 in m1:
> + if f2 in m1 and (not matcher or matcher(f2)):
> actions[f2] = ('m', (f2, f, None, False, pa.node()),
> "local directory rename, both created")
> else:
> @@ -895,7 +891,7 @@ def manifestmerge(repo, wctx, p2, pa, br
> "local directory rename - get from " + f)
> elif f in copy:
> f2 = copy[f]
> - if f2 in m2:
> + if f2 in m2 and (not matcher or matcher(f2)):
> actions[f] = ('m', (f2, f, f2, False, pa.node()),
> "remote copied from " + f2)
> else:
> @@ -927,7 +923,7 @@ def manifestmerge(repo, wctx, p2, pa, br
> # new file added in a directory that was moved
> df = dirmove[d] + f[len(d):]
> break
> - if df in m1:
> + if df in m1 and (not matcher or matcher(df)):
> actions[df] = ('m', (df, f, f, False, pa.node()),
> "local directory rename - respect move from " + f)
> elif acceptremote:
> _______________________________________________
> 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