grep: use "found" instead of "filerevmatches" examination for efficiency
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Sat, 15 Feb 2014 19:54:05 +0900
changeset 20837 191a0ae37767
parent 20836 a8b4541bb961
child 20838 fe849868fc5a
grep: use "found" instead of "filerevmatches" examination for efficiency Before this patch, internal function "display()" of "hg grep" stores whether matching is already found or not into the dictionary "filerevmatches" by "(fn, rev)" tuple as the key. But this is redundant, because: - "filerevmatches" is local variable of "display()", so each "display()" invocations don't affect others - both "fn" and "rev" (gotten from "ctx" argument) are never changed in each "display()" invocations Then, "filerevmatches" should have only one entry at most, and "(fn, rev) in filerevmatches" should be equal to "found". This patch uses "found" instead of "filerevmatches" examination for efficiency.
mercurial/commands.py
--- a/mercurial/commands.py	Sat Feb 15 19:52:36 2014 +0900
+++ b/mercurial/commands.py	Sat Feb 15 19:54:05 2014 +0900
@@ -3343,7 +3343,6 @@
         rev = ctx.rev()
         datefunc = ui.quiet and util.shortdate or util.datestr
         found = False
-        filerevmatches = {}
         @util.cachefunc
         def binary():
             flog = getfile(fn)
@@ -3366,10 +3365,8 @@
             if opts.get('date'):
                 cols.append((datefunc(ctx.date()), 'grep.date'))
             if opts.get('files_with_matches'):
-                c = (fn, rev)
-                if c in filerevmatches:
+                if found:
                     continue
-                filerevmatches[c] = 1
             else:
                 before = l.line[:l.colstart]
                 match = l.line[l.colstart:l.colend]