diff -r 526255fe7899 -r 3c84591e7321 mercurial/match.py --- a/mercurial/match.py Thu Jul 06 16:01:36 2017 -0700 +++ b/mercurial/match.py Thu Jul 06 17:39:24 2017 -0700 @@ -641,6 +641,59 @@ return ('' % (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 __call__(self, value): + return value in self._includes or self._matcher(value) + + def anypats(self): + return True + + def prefix(self): + return False + + def __repr__(self): + return ('' % + (self._matcher, sorted(self._includes))) + +class unionmatcher(basematcher): + """A matcher that is the union of several matchers.""" + def __init__(self, matchers): + self._matchers = matchers + + def __call__(self, value): + for match in self._matchers: + if match(value): + return True + return False + + def anypats(self): + return True + + def prefix(self): + return False + + def __repr__(self): + return ('' % self._matchers) + +class negatematcher(basematcher): + def __init__(self, matcher): + self._matcher = matcher + + def __call__(self, value): + return not self._matcher(value) + + def anypats(self): + return True + + def __repr__(self): + return ('' % self._matcher) + def patkind(pattern, default=None): '''If pattern is 'kind:pat' with a known kind, return kind.''' return _patsplit(pattern, default)[0]