diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -939,6 +939,11 @@ # step 1: find all explicit files results, work, dirsnotfound = self._walkexplicit(match, subrepos) + if matchtdir: + for d in work: + matchtdir(d[0]) + for d in dirsnotfound: + matchtdir(d) skipstep3 = skipstep3 and not (work or dirsnotfound) work = [d for d in work if not dirignore(d[0])] diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -2676,7 +2676,6 @@ # There's no API to copy a matcher. So mutate the passed matcher and # restore it when we're done. - oldexplicitdir = matcher.explicitdir oldtraversedir = matcher.traversedir res = [] @@ -2684,7 +2683,7 @@ try: if removeemptydirs: directories = [] - matcher.explicitdir = matcher.traversedir = directories.append + matcher.traversedir = directories.append status = repo.status(match=matcher, ignored=ignored, unknown=True) @@ -2706,5 +2705,4 @@ return res finally: - matcher.explicitdir = oldexplicitdir matcher.traversedir = oldtraversedir