ignore: fix include: rules depending on current directory (
issue4759)
When reading pattern files, we just call open(path), which is relative to the
current directory. Let's fix this by resolving the paths before attempting to
read the file.
--- a/mercurial/match.py Fri Jul 24 16:43:21 2015 -0700
+++ b/mercurial/match.py Fri Jul 24 16:44:52 2015 -0700
@@ -289,7 +289,8 @@
continue
elif kind == 'include':
try:
- includepats = readpatternfile(pat, self._warn)
+ fullpath = pathutil.join(root, pat)
+ includepats = readpatternfile(fullpath, self._warn)
for k, p, source in self._normalize(includepats, default,
root, cwd, auditor):
kindpats.append((k, p, source or pat))
--- a/tests/test-hgignore.t Fri Jul 24 16:43:21 2015 -0700
+++ b/tests/test-hgignore.t Fri Jul 24 16:44:52 2015 -0700
@@ -186,8 +186,9 @@
Check recursive uses of 'include:'
- $ echo "include:nestedignore" >> otherignore
- $ echo "glob:*ignore" > nestedignore
+ $ echo "include:nested/ignore" >> otherignore
+ $ mkdir nested
+ $ echo "glob:*ignore" > nested/ignore
$ hg status
A dir/b.o
@@ -199,6 +200,13 @@
$ mv goodignore otherignore
+Check using 'include:' while in a non-root directory
+
+ $ cd ..
+ $ hg -R ignorerepo status
+ A dir/b.o
+ $ cd ignorerepo
+
Check including subincludes
$ hg revert -q --all