# HG changeset patch # User Siddharth Agarwal # Date 1378345375 25200 # Node ID 1d07bf106c2ad1c7ef5e257e754ca8d858bd04b0 # Parent 5e1083447f7f4193b68123cbca3f8c54a8501d6b 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. diff -r 5e1083447f7f -r 1d07bf106c2a mercurial/scmutil.py --- 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):