D7820: grep: speed up `hg grep --all-files some/path` by using ctx.matches(match)
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Jan 10 18:42:18 UTC 2020
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
ctx.matches(match) avoids walking unintersting parts of the tree when
using tree manifests. That can make a very big difference when
grepping in a small subset of the tree (2.0s -> 0.7s in my case, but
can of course be made more extreme by picking a smaller subset of
files).
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D7820
AFFECTED FILES
mercurial/cmdutil.py
CHANGE DETAILS
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -2429,12 +2429,16 @@
def fns_generator():
if allfiles:
- fiter = iter(ctx)
+
+ def bad(f, msg):
+ pass
+
+ for f in ctx.matches(matchmod.badmatch(match, bad)):
+ yield f
else:
- fiter = ctx.files()
- for f in fiter:
- if match(f):
- yield f
+ for f in ctx.files():
+ if match(f):
+ yield f
fns = fns_generator()
prepare(ctx, fns)
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list