[PATCH 5 of 5] debugignore: find out why a file is being ignored (issue4856)
Laurent Charignon
lcharignon at fb.com
Wed Dec 23 14:42:22 CST 2015
# HG changeset patch
# User Laurent Charignon <lcharignon at fb.com>
# Date 1450902538 28800
# Wed Dec 23 12:28:58 2015 -0800
# Node ID 00a2dfdf542244b8bb5af4b7a9f14e4e6cd4cfa5
# Parent bdd28e27824fef50bf3b5a14512cdbcc5e5bff0d
debugignore: find out why a file is being ignored (issue4856)
This patch adds a capability to hg debugignore: to explain why a given file is
being ignores by mercurial. We display the filename, line and linenumber of the
rule that lead us to ignore the file.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2438,7 +2438,8 @@
With no argument display the combined ignore pattern.
- Given space separated file names, shows if the given file is ignored.
+ Given space separated file names, shows if the given file is ignored and
+ if so, show the ignore rule (file and line number) that matched it.
"""
ignore = repo.dirstate._ignore
if not files:
@@ -2451,13 +2452,16 @@
else:
for f in files:
ignored = None
+ ignoredata = None
if f != '.':
if ignore(f):
ignored = f
+ ignoredata = repo.dirstate._ignorefileandline(f)
else:
for p in util.finddirs(f):
if ignore(p):
ignored = p
+ ignoredata = repo.dirstate._ignorefileandline(p)
break
if ignored:
if ignored == f:
@@ -2465,6 +2469,9 @@
else:
ui.write("%s is ignored because of containing folder %s\n"
% (f, ignored))
+ ignorefile, lineno, line = ignoredata
+ ui.write("(ignore rule in %s, line %d: '%s')\n"
+ % (ignorefile, lineno, line))
else:
ui.write("%s is not ignored\n" % f)
diff --git a/tests/test-hgignore.t b/tests/test-hgignore.t
--- a/tests/test-hgignore.t
+++ b/tests/test-hgignore.t
@@ -168,6 +168,7 @@
$ hg debugignore b.o
b.o is ignored
+ (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 0: '*')
$ cd ..
@@ -198,6 +199,7 @@
a.c is not ignored
$ hg debugignore dir/c.o
dir/c.o is ignored
+ (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/**/c.o')
Check using 'include:' in ignore file
@@ -283,3 +285,4 @@
[1]
$ hg debugignore dir1/file2
dir1/file2 is ignored
+ (ignore rule in dir2/.hgignore, line 0: 'file*2')
More information about the Mercurial-devel
mailing list