diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -626,8 +626,7 @@ class dirstate(object): results[nf] = None if matchedir: matchedir(nf) - if not dirignore(nf): - wadd(nf) + wadd(nf) elif kind == regkind or kind == lnkkind: results[nf] = st else: @@ -649,6 +648,9 @@ class dirstate(object): else: badfn(ff, inst.strerror) + work = [d for d in work if not dirignore(d)] + wadd = work.append + # step 2: visit subdirectories while work: nd = work.pop()