mercurial/match.py
changeset 33448 04be8aec44a8
parent 33447 6f4e5e5940a5
child 33478 cf15c3cc304c
--- 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 ('<unionmatcher matchers=%r>' % self._matchers)