Patchwork D3728: grep: adds unmodified mode

login
register
mail settings
Submitter phabricator
Date June 16, 2018, 1:46 p.m.
Message ID <c581d7737f9708d2f190e18d7c4dab5b@localhost.localdomain>
Download mbox | patch
Permalink /patch/32195/
State Not Applicable
Headers show

Comments

phabricator - June 16, 2018, 1:46 p.m.
sangeet259 updated this revision to Diff 9107.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D3728?vs=9092&id=9107

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

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

CHANGE DETAILS




To: sangeet259, #hg-reviewers
Cc: pulkit, yuja, mharbison72, mercurial-devel
Yuya Nishihara - June 17, 2018, 3:36 a.m.
> +  $ hg init sng
> +  $ cd sng
> +  $ echo "unmod" >> um
> +  $ hg ci -A -m "adds unmod to um"
> +  adding um
> +  $ echo "something else" >> new
> +  $ hg ci -A -m "second commit"
> +  adding new
> +  $ hg grep -r "." "unmod"
> +  [1]
> +  $ hg grep -r "." "unmod" --unmodified

--allfiles ?

> @@ -1881,6 +1881,9 @@
>      yielding each context, the iterator will first call the prepare
>      function on each context in the window in forward order.'''
>  
> +    allfiles = opts.get('allfiles')
> +    if allfiles and len(revs) > 1:
> +        raise error.Abort(_("multiple revisions not supported with --allfiles"))

`revs` isn't defined yet.

>      follow = opts.get('follow') or opts.get('follow_first')
>      revs = _walkrevs(repo, opts)
>      if not revs:
phabricator - June 17, 2018, 3:37 a.m.
yuja added a comment.


  > +  $ hg init sng
  >  +  $ cd sng
  >  +  $ echo "unmod" >> um
  >  +  $ hg ci -A -m "adds unmod to um"
  >  +  adding um
  >  +  $ echo "something else" >> new
  >  +  $ hg ci -A -m "second commit"
  >  +  adding new
  >  +  $ hg grep -r "." "unmod"
  >  +  [1]
  >  +  $ hg grep -r "." "unmod" --unmodified
  
  --allfiles ?
  
  > @@ -1881,6 +1881,9 @@
  > 
  >   yielding each context, the iterator will first call the prepare
  >   function on each context in the window in forward order.'''
  >     
  > 
  > +    allfiles = opts.get('allfiles')
  >  +    if allfiles and len(revs) > 1:
  >  +        raise error.Abort(_("multiple revisions not supported with --allfiles"))
  
  `revs` isn't defined yet.
  
  >   follow = opts.get('follow') or opts.get('follow_first')
  >   revs = _walkrevs(repo, opts)
  >   if not revs:

REPOSITORY
  rHG Mercurial

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

To: sangeet259, #hg-reviewers
Cc: pulkit, yuja, mharbison72, 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
@@ -368,3 +368,20 @@ 
   binfile.bin:0:+: Binary file matches
 
   $ cd ..
+
+Test for showing working of unmodified flag
+
+  $ hg init sng
+  $ cd sng
+  $ echo "unmod" >> um
+  $ hg ci -A -m "adds unmod to um"
+  adding um
+  $ echo "something else" >> new
+  $ hg ci -A -m "second commit"
+  adding new
+  $ hg grep -r "." "unmod"
+  [1]
+  $ hg grep -r "." "unmod" --unmodified
+  um:1:unmod
+
+  $ cd ..
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2408,6 +2408,8 @@ 
     ('n', 'line-number', None, _('print matching line numbers')),
     ('r', 'rev', [],
      _('only search files changed within revision range'), _('REV')),
+    ('', 'allfiles', False,
+     _('include all files in the changeset while grepping (EXPERIMENTAL)')),
     ('u', 'user', None, _('list the author (long with -v)')),
     ('d', 'date', None, _('list the date (short with -q)')),
     ] + formatteropts + walkopts,
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -1881,6 +1881,9 @@ 
     yielding each context, the iterator will first call the prepare
     function on each context in the window in forward order.'''
 
+    allfiles = opts.get('allfiles')
+    if allfiles and len(revs) > 1:
+        raise error.Abort(_("multiple revisions not supported with --allfiles"))
     follow = opts.get('follow') or opts.get('follow_first')
     revs = _walkrevs(repo, opts)
     if not revs:
@@ -1990,7 +1993,11 @@ 
                 ctx = change(rev)
                 if not fns:
                     def fns_generator():
-                        for f in ctx.files():
+                        if allfiles and len(revs) == 1:
+                            fiter = iter(ctx)
+                        else:
+                            fiter = ctx.files()
+                        for f in fiter:
                             if match(f):
                                 yield f
                     fns = fns_generator()