summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ab2fdb3)
raw | patch | inline | side by side (parent: ab2fdb3)
author | Finn Arne Gangstad <finnag@pvv.org> | |
Tue, 10 Feb 2009 14:20:17 +0000 (15:20 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 12 Feb 2009 19:36:43 +0000 (11:36 -0800) |
"\" was treated differently in exclude rules depending on whether a
wildcard match was done. For wildcard rules, "\" was de-escaped in
fnmatch, but this was not done for other rules since they used strcmp
instead. A file named "#foo" would not be excluded by "\#foo", but would
be excluded by "\#foo*".
We now treat all rules with "\" as wildcard rules.
Another solution could be to de-escape all non-wildcard rules as we
read them, but we would have to do the de-escaping exactly as fnmatch
does it to avoid inconsistencies.
Signed-off-by: Finn Arne Gangstad <finnag@pvv.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
wildcard match was done. For wildcard rules, "\" was de-escaped in
fnmatch, but this was not done for other rules since they used strcmp
instead. A file named "#foo" would not be excluded by "\#foo", but would
be excluded by "\#foo*".
We now treat all rules with "\" as wildcard rules.
Another solution could be to de-escape all non-wildcard rules as we
read them, but we would have to do the de-escaping exactly as fnmatch
does it to avoid inconsistencies.
Signed-off-by: Finn Arne Gangstad <finnag@pvv.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c | patch | blob | history | |
t/t3001-ls-files-others-exclude.sh | patch | blob | history |
index cfaa28ff23acb462aa0cfd54a405316320ec3bc8..04a4b9861e03739df5c048448cd5c0be28b400db 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -139,7 +139,7 @@ int match_pathspec(const char **pathspec, const char *name, int namelen, int pre
static int no_wildcard(const char *string)
{
- return string[strcspn(string, "*?[{")] == '\0';
+ return string[strcspn(string, "*?[{\\")] == '\0';
}
void add_exclude(const char *string, const char *base,
index 8666946b025097d3e93c7853d39265429da81578..6a1711374579082000e95e39e4f6c0d572d11cd4 100755 (executable)
>$dir/a.$i
done
done
+>"#ignore1"
+>"#ignore2"
+>"#hidden"
cat >expect <<EOF
a.2
EOF
echo '.gitignore
+\#ignore1
+\#ignore2*
+\#hid*n
output
expect
.gitignore
>output &&
test_cmp expect output'
-cat > excludes-file << EOF
+cat > excludes-file <<\EOF
*.[1-8]
e*
+\#*
EOF
git config core.excludesFile excludes-file