Mercurial > hg
changeset 41498:a02c8b605d31
diff: use match.intersectmatchers()
Differential Revision: https://phab.mercurial-scm.org/D5789
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 31 Jan 2019 16:32:54 -0800 |
parents | 3028b4073be1 |
children | a5d8824483ba |
files | mercurial/patch.py |
diffstat | 1 files changed, 5 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/patch.py Fri Feb 01 09:13:39 2019 -0800 +++ b/mercurial/patch.py Thu Jan 31 16:32:54 2019 -0800 @@ -32,6 +32,7 @@ encoding, error, mail, + match as matchmod, mdiff, pathutil, pycompat, @@ -2319,12 +2320,9 @@ ctx1 = repo[node1] ctx2 = repo[node2] - relfiltered = False - if relroot != '' and match.always(): - # as a special case, create a new matcher with just the relroot - pats = [relroot] - match = scmutil.match(ctx2, pats, default='path') - relfiltered = True + if relroot: + relrootmatch = scmutil.match(ctx2, pats=[relroot], default='path') + match = matchmod.intersectmatchers(match, relrootmatch) if not changes: changes = ctx1.status(ctx2, match=match) @@ -2344,16 +2342,7 @@ if opts.git or opts.upgrade: copy = copies.pathcopies(ctx1, ctx2, match=match) - if relroot is not None: - if not relfiltered: - # XXX this would ideally be done in the matcher, but that is - # generally meant to 'or' patterns, not 'and' them. In this case we - # need to 'and' all the patterns from the matcher with relroot. - def filterrel(l): - return [f for f in l if f.startswith(relroot)] - modified = filterrel(modified) - added = filterrel(added) - removed = filterrel(removed) + if relroot: # filter out copies where either side isn't inside the relative root copy = dict(((dst, src) for (dst, src) in copy.iteritems() if dst.startswith(relroot)