From dd482eeac2524627beee323438dd1fdf34b4f97e Mon Sep 17 00:00:00 2001 From: Finn Arne Gangstad Date: Tue, 10 Feb 2009 15:20:17 +0100 Subject: [PATCH] Support "\" in non-wildcard exclusion entries "\" 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 Signed-off-by: Junio C Hamano --- dir.c | 2 +- t/t3001-ls-files-others-exclude.sh | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/dir.c b/dir.c index cfaa28ff23..04a4b9861e 100644 --- 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, diff --git a/t/t3001-ls-files-others-exclude.sh b/t/t3001-ls-files-others-exclude.sh index 8666946b02..6a17113745 100755 --- a/t/t3001-ls-files-others-exclude.sh +++ b/t/t3001-ls-files-others-exclude.sh @@ -19,6 +19,9 @@ do >$dir/a.$i done done +>"#ignore1" +>"#ignore2" +>"#hidden" cat >expect <output && test_cmp expect output' -cat > excludes-file << EOF +cat > excludes-file <<\EOF *.[1-8] e* +\#* EOF git config core.excludesFile excludes-file