Re: [PATCH v2] Support "\" in non-wildcard exclusion entries
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:46:08
Hi, On Tue, 10 Feb 2009, Finn Arne Gangstad wrote:
"\" 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 <redacted> --- dir.c | 2 +- t/t3003-ls-files-others-escaped-excludes.sh | 37 +++++++++++++++++++++++++++
Thanks, much appreciated!
quoted hunk ↗ jump to hunk
diff --git a/t/t3003-ls-files-others-escaped-excludes.sh b/t/t3003-ls-files-others-escaped-excludes.sh new file mode 100755 index 0000000..bce8741 --- /dev/null +++ b/t/t3003-ls-files-others-escaped-excludes.sh@@ -0,0 +1,37 @@ +#!/bin/sh +# +# Copyright (c) 2009 Finn Arne Gangstad +# + +test_description='git ls-files --others with escaped excludes + +This test tests exclusion patterns with \ in them and makes sure they +are treated correctly and identically both for normal and wildcard rules. +' + +. ./test-lib.sh + +touch \#ignore1 &&
In other tests, we avoid 'touch' (IIRC it is not available everywhere or some such), and we write ': > \#ignore1' instead. BTW we do not need the # in the name, it could be any letter, right? (Just for my understanding, not as a request to change it.)
+touch \#ignore2 && +touch \#hidden && +touch keep + +echo keep > expect + +cat >.gitignore <<EOF
You probably want to use \EOF here.
+.gitignore +expect +output +\#ignore1 +\#ignore2* +\#hid*n +EOF + +test_expect_success \ + 'git ls-files --others with escaped excludes.' \ + 'git ls-files --others \ + --exclude-per-directory=.gitignore \ + >output && + test_cmp expect output' + +test_done
Thanks! Dscho