localrepo: allow narrowmatch() to accept matcher to intersect with
It's pretty common that we need to intersect a matcher we already have
(usually from the user) with the narrow matcher. Let's make
repo.narrowmatch() take an optional matcher to intersect with.
Differential Revision: https://phab.mercurial-scm.org/D4896
--- a/mercurial/changegroup.py Fri Oct 05 01:55:51 2018 +0300
+++ b/mercurial/changegroup.py Fri Sep 28 12:29:21 2018 -0700
@@ -1271,8 +1271,7 @@
# Requested files could include files not in the local store. So
# filter those out.
- filematcher = matchmod.intersectmatchers(repo.narrowmatch(),
- filematcher)
+ filematcher = repo.narrowmatch(filematcher)
fn = _packermap[version][0]
return fn(repo, filematcher, bundlecaps, ellipses=ellipses,
--- a/mercurial/commands.py Fri Oct 05 01:55:51 2018 +0300
+++ b/mercurial/commands.py Fri Sep 28 12:29:21 2018 -0700
@@ -44,7 +44,6 @@
help,
hg,
logcmdutil,
- match as matchmod,
merge as mergemod,
narrowspec,
obsolete,
@@ -1970,7 +1969,7 @@
diffopts = patch.diffallopts(ui, opts)
m = scmutil.match(ctx2, pats, opts)
- m = matchmod.intersectmatchers(m, repo.narrowmatch())
+ m = repo.narrowmatch(m)
ui.pager('diff')
logcmdutil.diffordiffstat(ui, repo, diffopts, node1, node2, m, stat=stat,
listsubrepos=opts.get('subrepos'),
--- a/mercurial/localrepo.py Fri Oct 05 01:55:51 2018 +0300
+++ b/mercurial/localrepo.py Fri Sep 28 12:29:21 2018 -0700
@@ -1200,8 +1200,14 @@
include, exclude = self.narrowpats
return narrowspec.match(self.root, include=include, exclude=exclude)
- # TODO(martinvonz): make this property-like instead?
- def narrowmatch(self):
+ def narrowmatch(self, match=None):
+ """matcher corresponding the the repo's narrowspec
+
+ If `match` is given, then that will be intersected with the narrow
+ matcher.
+ """
+ if match:
+ return matchmod.intersectmatchers(match, self._narrowmatch)
return self._narrowmatch
def setnarrowpats(self, newincludes, newexcludes):