# HG changeset patch # User Martin von Zweigbergk # Date 1499795170 25200 # Node ID 04be8aec44a8ffdf954d7ab3ae81ca93a6409cf7 # Parent 6f4e5e5940a5d7ae3ae7a1483f241fc2a420fadf match: make unionmatcher a proper matcher unionmatcher is currently used where only a limited subset of its functions will be called. Specifically, visitdir() is never called. The next patch will pass it to dirstate.walk() where it will matter that visitdir() is correctly implemented, so let's fix that. Also add the explicitdir etc that will also be assumed by dirstate.walk() to exist on a matcher. Differential Revision: https://phab.mercurial-scm.org/D58 diff -r 6f4e5e5940a5 -r 04be8aec44a8 mercurial/match.py --- a/mercurial/match.py Fri Jul 07 14:39:59 2017 -0700 +++ b/mercurial/match.py Tue Jul 11 10:46:10 2017 -0700 @@ -648,8 +648,17 @@ (self._path, self._matcher)) class unionmatcher(basematcher): - """A matcher that is the union of several matchers.""" + """A matcher that is the union of several matchers. + + The non-matching-attributes (root, cwd, bad, explicitdir, traversedir) are + taken from the first matcher. + """ + def __init__(self, matchers): + m1 = matchers[0] + super(unionmatcher, self).__init__(m1._root, m1._cwd) + self.explicitdir = m1.explicitdir + self.traversedir = m1.traversedir self._matchers = matchers def matchfn(self, f): @@ -658,6 +667,15 @@ return True return False + def visitdir(self, dir): + r = False + for m in self._matchers: + v = m.visitdir(dir) + if v == 'all': + return v + r |= v + return r + def __repr__(self): return ('' % self._matchers)