# HG changeset patch # User FUJIWARA Katsunori # Date 1392461645 -32400 # Node ID 191a0ae3776784473fba0a54070742eb8a5fdd9e # Parent a8b4541bb961b53233a2f401adf682be9ed25f3a 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. diff -r a8b4541bb961 -r 191a0ae37767 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]