changeset 27671:067d87feeb11

debugignore: find out if a file is being ignored Before this patch debugignore was just displaying the list of ignore patterns. This patch makes it support a list of filename as argument and tells the user if those given files are ignored or not.
author Laurent Charignon <lcharignon@fb.com>
date Tue, 05 Jan 2016 07:47:08 -0800
parents 4374f039d269
children f2da9bb87ae0
files mercurial/commands.py tests/test-help.t tests/test-hgignore.t
diffstat 3 files changed, 44 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Tue Jan 05 07:52:04 2016 -0800
+++ b/mercurial/commands.py	Tue Jan 05 07:47:08 2016 -0800
@@ -2435,15 +2435,41 @@
         raise error.Abort(_('unknown bundle type specified with --type'))
     changegroup.writebundle(ui, bundle, bundlepath, bundletype)
 
-@command('debugignore', [], '')
-def debugignore(ui, repo, *values, **opts):
-    """display the combined ignore pattern"""
+@command('debugignore', [], '[FILE]')
+def debugignore(ui, repo, *files, **opts):
+    """display the combined ignore pattern and information about ignored files
+
+    With no argument display the combined ignore pattern.
+
+    Given space separated file names, shows if the given file is ignored.
+    """
     ignore = repo.dirstate._ignore
-    includepat = getattr(ignore, 'includepat', None)
-    if includepat is not None:
-        ui.write("%s\n" % includepat)
+    if not files:
+        # Show all the patterns
+        includepat = getattr(ignore, 'includepat', None)
+        if includepat is not None:
+            ui.write("%s\n" % includepat)
+        else:
+            raise error.Abort(_("no ignore patterns found"))
     else:
-        raise error.Abort(_("no ignore patterns found"))
+        for f in files:
+            ignored = None
+            if f != '.':
+                if ignore(f):
+                    ignored = f
+                else:
+                    for p in util.finddirs(f):
+                        if ignore(p):
+                            ignored = p
+                            break
+            if ignored:
+                if ignored == f:
+                    ui.write("%s is ignored\n" % f)
+                else:
+                    ui.write("%s is ignored because of containing folder %s\n"
+                             % (f, ignored))
+            else:
+                ui.write("%s is not ignored\n" % f)
 
 @command('debugindex', debugrevlogopts +
     [('f', 'format', 0, _('revlog format'), _('FORMAT'))],
--- a/tests/test-help.t	Tue Jan 05 07:52:04 2016 -0800
+++ b/tests/test-help.t	Tue Jan 05 07:47:08 2016 -0800
@@ -829,7 +829,8 @@
    debugfsinfo   show information detected about current filesystem
    debuggetbundle
                  retrieves a bundle from a repo
-   debugignore   display the combined ignore pattern
+   debugignore   display the combined ignore pattern and information about
+                 ignored files
    debugindex    dump the contents of an index file
    debugindexdot
                  dump an index DAG as a graphviz dot file
--- a/tests/test-hgignore.t	Tue Jan 05 07:52:04 2016 -0800
+++ b/tests/test-hgignore.t	Tue Jan 05 07:47:08 2016 -0800
@@ -166,6 +166,9 @@
   $ hg debugignore
   (?:(?:|.*/)[^/]*(?:/|$))
 
+  $ hg debugignore b.o
+  b.o is ignored
+
   $ cd ..
 
 Check patterns that match only the directory
@@ -191,6 +194,10 @@
   ? a.c
   ? a.o
   ? syntax
+  $ hg debugignore a.c
+  a.c is not ignored
+  $ hg debugignore dir/c.o
+  dir/c.o is ignored
 
 Check using 'include:' in ignore file
 
@@ -274,3 +281,5 @@
 
   $ hg status | grep file2
   [1]
+  $ hg debugignore dir1/file2
+  dir1/file2 is ignored