[PATCH] addremove: don't do full walks
Siddharth Agarwal
sid0 at fb.com
Wed Sep 4 20:48:06 CDT 2013
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1378345375 25200
# Wed Sep 04 18:42:55 2013 -0700
# Node ID c11bcb87c9338b29a67fc6e260d50b9a18705994
# Parent 5e8173f8486bce989a7439bd8ca24078864a62d8
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 --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -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):
More information about the Mercurial-devel
mailing list