Patchwork D3763: grep: add `--diff` flag

login
register
mail settings
Submitter phabricator
Date June 21, 2018, 12:45 p.m.
Message ID <8ca09db6f3975e9e3038c07eb6c4938f@localhost.localdomain>
Download mbox | patch
Permalink /patch/32360/
State Not Applicable
Headers show

Comments

phabricator - June 21, 2018, 12:45 p.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG7fbb5d76c555: grep: add --diff flag (authored by sangeet259, committed by ).

CHANGED PRIOR TO COMMIT
  https://phab.mercurial-scm.org/D3763?vs=9217&id=9245#toc

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D3763?vs=9217&id=9245

REVISION DETAIL
  https://phab.mercurial-scm.org/D3763

AFFECTED FILES
  mercurial/commands.py
  tests/test-completion.t
  tests/test-grep.t

CHANGE DETAILS




To: sangeet259, #hg-reviewers
Cc: yuja, pulkit, mercurial-devel

Patch

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 ..
 
 Test for showing working of allfiles flag
diff --git a/tests/test-completion.t b/tests/test-completion.t
--- a/tests/test-completion.t
+++ b/tests/test-completion.t
@@ -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
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -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