# HG changeset patch # User Martin von Zweigbergk # Date 1493999386 25200 # Node ID 8f1a2b848b52ea7bf3fe2404e3b62924c7aae93f # Parent cf042543afa25ea81f0fe833807b85050897dd9f dirstate: optimize walk() by using match.visitdir() We already have the logic for restricting directory walks in match.visitdir() that we use for treemanifests. We should take advantage of it when walking the working copy as well. This speeds up "hg st -I rootfilesin:." on the Firefox repo from 0.587s to 0.305s on warm disk (and much more on cold disk). More time is spent reading the dirstate than walking the working copy after. I tried to find scenarios where calling match.visitdir() would be a noticeable overhead, but I couldn't find any. I encourage the reader to try for themselves, since this is performance-critical code. diff -r cf042543afa2 -r 8f1a2b848b52 mercurial/dirstate.py --- a/mercurial/dirstate.py Fri May 05 08:49:07 2017 -0700 +++ b/mercurial/dirstate.py Fri May 05 08:49:46 2017 -0700 @@ -1021,6 +1021,8 @@ wadd = work.append while work: nd = work.pop() + if not match.visitdir(nd): + continue skip = None if nd == '.': nd = ''