changeset 19655:1d07bf106c2a

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.
author Siddharth Agarwal <sid0@fb.com>
date Wed, 04 Sep 2013 18:42:55 -0700
parents 5e1083447f7f
children 60ce14e41faf
files mercurial/scmutil.py
diffstat 1 files changed, 2 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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):