[Differential] [Request, 25 lines] D57: match: write forceincludematcher using unionmatcher
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Jul 12 00:01:55 UTC 2017
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
REVISION SUMMARY
The forceincludematcher is simply a unionmatcher of a includematcher
(matching paths recursively) with the given matcher. Since the
forceincludematcher is only used by sparse, move it there.
I don't have a good sparse repo setup to test performance impact on.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D57
AFFECTED FILES
mercurial/match.py
mercurial/sparse.py
CHANGE DETAILS
Index: mercurial/sparse.py
===================================================================
--- mercurial/sparse.py
+++ mercurial/sparse.py
@@ -242,6 +242,13 @@
'sparse checkout\n')
repo.ui.status(msg % len(tempincludes))
+def forceincludematcher(matcher, includes):
+ """Returns a matcher that returns true for any of the forced includes
+ before testing against the actual matcher."""
+ kindpats = [('path', include, '') for include in includes]
+ includematcher = matchmod.includematcher('', '', kindpats)
+ return matchmod.unionmatcher([includematcher, matcher])
+
def matcher(repo, revs=None, includetemp=True):
"""Obtain a matcher for sparse working directories for the given revs.
@@ -289,7 +296,7 @@
include=includes, exclude=excludes,
default='relpath')
if subdirs:
- matcher = matchmod.forceincludematcher(matcher, subdirs)
+ matcher = forceincludematcher(matcher, subdirs)
matchers.append(matcher)
except IOError:
pass
@@ -303,7 +310,7 @@
if includetemp:
tempincludes = readtemporaryincludes(repo)
- result = matchmod.forceincludematcher(result, tempincludes)
+ result = forceincludematcher(result, tempincludes)
repo._sparsematchercache[key] = result
Index: mercurial/match.py
===================================================================
--- mercurial/match.py
+++ mercurial/match.py
@@ -648,20 +648,6 @@
return ('<subdirmatcher path=%r, matcher=%r>' %
(self._path, self._matcher))
-class forceincludematcher(basematcher):
- """A matcher that returns true for any of the forced includes before testing
- against the actual matcher."""
- def __init__(self, matcher, includes):
- self._matcher = matcher
- self._includes = includes
-
- def matchfn(self, f):
- return f in self._includes or self._matcher(f)
-
- def __repr__(self):
- return ('<forceincludematcher matcher=%r, includes=%r>' %
- (self._matcher, sorted(self._includes)))
-
class unionmatcher(basematcher):
"""A matcher that is the union of several matchers."""
def __init__(self, matchers):
EMAIL PREFERENCES
https://phab.mercurial-scm.org/settings/panel/emailpreferences/
To: martinvonz
Cc: mercurial-devel, indygreg
More information about the Mercurial-devel
mailing list