grep: add --diff flag
authorSangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
Sun, 17 Jun 2018 15:52:08 +0530
changeset 38421 7fbb5d76c555
parent 38420 c1f4364f9336
child 38422 a6addfd64507
grep: add --diff flag Adds a diff flag, which works exactly same as all, in fact since --all searches diffs, there diff is a better name for it. The all flag is still here for backward compatibility reasons. Some major tests for all has been picked and added for diff. Differential Revision: https://phab.mercurial-scm.org/D3763
mercurial/commands.py
tests/test-completion.t
tests/test-grep.t
--- a/mercurial/commands.py	Wed Jun 20 09:27:30 2018 -0700
+++ b/mercurial/commands.py	Sun Jun 17 15:52:08 2018 +0530
@@ -2391,6 +2391,8 @@
 @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,'
@@ -2419,7 +2421,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.
@@ -2431,6 +2433,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
@@ -2527,7 +2530,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]
@@ -2540,7 +2543,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')),
@@ -2644,7 +2647,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
--- a/tests/test-completion.t	Wed Jun 20 09:27:30 2018 -0700
+++ b/tests/test-completion.t	Sun Jun 17 15:52:08 2018 +0530
@@ -313,7 +313,7 @@
   debugwireproto: localssh, peer, noreadstderr, nologhandshake, ssh, remotecmd, insecure
   files: rev, print0, include, exclude, template, subrepos
   graft: rev, continue, stop, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
-  grep: print0, all, text, follow, ignore-case, files-with-matches, line-number, rev, allfiles, user, date, template, include, exclude
+  grep: print0, all, diff, text, follow, ignore-case, files-with-matches, line-number, rev, allfiles, user, date, template, include, exclude
   heads: rev, topo, active, closed, style, template
   help: extension, command, keyword, system
   identify: rev, num, id, branch, tags, bookmarks, ssh, remotecmd, insecure, template
--- a/tests/test-grep.t	Wed Jun 20 09:27:30 2018 -0700
+++ b/tests/test-grep.t	Sun Jun 17 15:52:08 2018 +0530
@@ -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 ..
 
 Test for showing working of allfiles flag