addremove: don't do full walks
Full walks are only necessary when the caller needs the list of clean files.
addremove by definition doesn't need them.
With this patch and an extension that produces a subset of results for
dirstate.walk when full is False, on a repository with over 200,000 files, hg
addremove drops from 2.8 seconds to 0.5.
--- a/mercurial/scmutil.py Thu Sep 05 11:45:27 2013 -0400
+++ b/mercurial/scmutil.py Wed Sep 04 18:42:55 2013 -0700
@@ -755,7 +755,8 @@
ctx = repo[None]
dirstate = repo.dirstate
- walkresults = dirstate.walk(matcher, sorted(ctx.substate), True, False)
+ walkresults = dirstate.walk(matcher, sorted(ctx.substate), True, False,
+ full=False)
for abs, st in walkresults.iteritems():
dstate = dirstate[abs]
if dstate == '?' and audit_path.check(abs):