diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2416,6 +2416,7 @@ @command('grep', [('0', 'print0', None, _('end fields with NUL')), ('', 'all', None, _('print all revisions that match')), + ('', 'diff', None, _('print all revisions when the term was introduced or removed')), ('a', 'text', None, _('treat all files as text')), ('f', 'follow', None, _('follow changeset history,' @@ -2442,7 +2443,7 @@ file in which it finds a match. To get it to print every revision that contains a change in match status ("-" for a match that becomes a non-match, or "+" for a non-match that becomes a match), use the - --all flag. + --diff/--all flag. PATTERN can be any Python (roughly Perl-compatible) regular expression. @@ -2454,6 +2455,7 @@ Returns 0 if a match is found, 1 otherwise. """ opts = pycompat.byteskwargs(opts) + diff = opts.get('all') or opts.get('diff') reflags = re.M if opts.get('ignore_case'): reflags |= re.I @@ -2550,7 +2552,7 @@ return ctx[fn].isbinary() fieldnamemap = {'filename': 'file', 'linenumber': 'line_number'} - if opts.get('all'): + if diff: iter = difflinestates(pstates, states) else: iter = [('', l) for l in states] @@ -2563,7 +2565,7 @@ ('rev', rev, True), ('linenumber', l.linenum, opts.get('line_number')), ] - if opts.get('all'): + if diff: cols.append(('change', change, True)) cols.extend([ ('user', formatuser(ctx.user()), opts.get('user')), @@ -2667,7 +2669,7 @@ if pstates or states: r = display(fm, fn, ctx, pstates, states) found = found or r - if r and not opts.get('all'): + if r and not diff: skip[fn] = True if copy: skip[copy] = True diff --git a/tests/test-grep.t b/tests/test-grep.t --- a/tests/test-grep.t +++ b/tests/test-grep.t @@ -281,6 +281,11 @@ color:2:-:orange color:1:+:orange + $ hg grep --diff orange + color:3:+:orange + color:2:-:orange + color:1:+:orange + test substring match: '^' should only match at the beginning $ hg grep '^.' --config extensions.color= --color debug @@ -349,6 +354,10 @@ color:3:-:red color:1:+:red + $ hg grep --diff red + color:3:-:red + color:1:+:red + Issue3885: test that changing revision order does not alter the revisions printed, just their order. @@ -360,6 +369,14 @@ color:3:-:red color:1:+:red + $ hg grep --diff red -r "all()" + color:1:+:red + color:3:-:red + + $ hg grep --diff red -r "reverse(all())" + color:3:-:red + color:1:+:red + $ cd .. $ hg init a @@ -370,6 +387,9 @@ $ hg grep "MaCam" --all binfile.bin:0:+: Binary file matches + $ hg grep "MaCam" --diff + binfile.bin:0:+: Binary file matches + $ cd .. Fix_Wdir(): test that passing wdir() t -r flag does greps on the