# HG changeset patch # User Valentin Gatien-Baron # Date 2020-05-17 17:10:54 # Node ID 8d552701806d537bffe741b6ecebc4bbe7226329 # Parent f90957c947f44a2d5d221132be60a1fc66209c5a grep: stop computing information for --diff when unnecessary This is one reason why `hg grep pattern` essentially does `hg cat -r . 'set:**'` inside. There is no speed improvement in this commit, because the rest of the code still greps data from filelog instead of working copy when possible. Differential Revision: https://phab.mercurial-scm.org/D8544 diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -3594,9 +3594,10 @@ def grep(ui, repo, pattern, *pats, **opt def prep(ctx, fns): rev = ctx.rev() pctx = ctx.p1() - parent = pctx.rev() matches.setdefault(rev, {}) - matches.setdefault(parent, {}) + if diff: + parent = pctx.rev() + matches.setdefault(parent, {}) files = revfiles.setdefault(rev, []) for fn in fns: flog = getfile(fn) @@ -3620,14 +3621,17 @@ def grep(ui, repo, pattern, *pats, **opt content = get_file_content(fn, flog, fnode, ctx, rev) grepbody(fn, rev, content) - pfn = copy or fn - if pfn not in matches[parent]: - try: - pfnode = pctx.filenode(pfn) - pcontent = get_file_content(pfn, flog, pfnode, pctx, parent) - grepbody(pfn, parent, pcontent) - except error.LookupError: - pass + if diff: + pfn = copy or fn + if pfn not in matches[parent]: + try: + pfnode = pctx.filenode(pfn) + pcontent = get_file_content( + pfn, flog, pfnode, pctx, parent + ) + grepbody(pfn, parent, pcontent) + except error.LookupError: + pass ui.pager(b'grep') fm = ui.formatter(b'grep', opts)