From: Finn Arne Gangstad <finnag@pvv•org>
To: Johannes Schindelin <Johannes.Schindelin@gmx•de>,
git@vger•kernel.org, gitster@pobox•com
Subject: [PATCH v2] Support "\" in non-wildcard exclusion entries
Date: Tue, 10 Feb 2009 15:20:17 +0100 [thread overview]
Message-ID: <20090210142017.GA16478@pvv.org> (raw)
In-Reply-To: <alpine.DEB.1.00.0902101402230.10279@pacific.mpi-cbg.de>
"\" 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>
---
dir.c | 2 +-
t/t3003-ls-files-others-escaped-excludes.sh | 37 +++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 1 deletions(-)
create mode 100755 t/t3003-ls-files-others-escaped-excludes.sh
diff --git a/dir.c b/dir.c
index cfd1ea5..2245749 100644
--- a/dir.c
+++ b/dir.c
@@ -137,7 +137,7 @@ int match_pathspec(const char **pathspec, const char *name, int namelen,
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/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 &&
+touch \#ignore2 &&
+touch \#hidden &&
+touch keep
+
+echo keep > expect
+
+cat >.gitignore <<EOF
+.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
--
1.6.2.rc0.11.g665ed
next prev parent reply other threads:[~2009-02-10 14:21 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-10 12:11 [PATCH] Support \ in non-wildcard .gitignore entries Finn Arne Gangstad
2009-02-10 12:56 ` Johannes Schindelin
2009-02-10 12:58 ` Finn Arne Gangstad
2009-02-10 13:02 ` Johannes Schindelin
2009-02-10 14:20 ` Finn Arne Gangstad [this message]
2009-02-10 14:27 ` [PATCH v2] Support "\" in non-wildcard exclusion entries Johannes Schindelin
2009-02-10 14:37 ` Finn Arne Gangstad
2009-02-10 15:24 ` Junio C Hamano
2009-02-10 16:41 ` Junio C Hamano
2009-02-10 17:23 ` Finn Arne Gangstad
2009-02-12 9:32 ` [PATCH v3] " Finn Arne Gangstad
2009-02-12 10:44 ` Johannes Schindelin
2009-02-12 21:03 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090210142017.GA16478@pvv.org \
--to=finnag@pvv$(echo .)org \
--cc=Johannes.Schindelin@gmx$(echo .)de \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox