summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Rast <trast@student.ethz.ch>2013-03-01 20:06:17 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-03-01 20:24:45 (GMT)
commit8b1bd024154f0ee0d71a6befe9bbd96462e76abc (patch)
tree08c39a9a729bd3d02f632f95b550322abc8fde68
parent1d38c6971dd1a4b054d90b7ae4c9de5400b9d818 (diff)
downloadgit-8b1bd024154f0ee0d71a6befe9bbd96462e76abc.zip
git-8b1bd024154f0ee0d71a6befe9bbd96462e76abc.tar.gz
git-8b1bd024154f0ee0d71a6befe9bbd96462e76abc.tar.bz2
Make !pattern in .gitattributes non-fatal
Before 82dce99 (attr: more matching optimizations from .gitignore, 2012-10-15), .gitattributes did not have any special treatment of a leading '!'. The docs, however, always said The rules how the pattern matches paths are the same as in `.gitignore` files; see linkgit:gitignore[5]. By those rules, leading '!' means pattern negation. So 82dce99 correctly determined that this kind of line makes no sense and should be disallowed. However, users who actually had a rule for files starting with a '!' are in a bad position: before 82dce99 '!' matched that literal character, so it is conceivable that users have .gitattributes with such lines in them. After 82dce99 the unescaped version was disallowed in such a way that git outright refuses to run(!) most commands in the presence of such a .gitattributes. It therefore becomes very hard to fix, let alone work with, such repositories. Let's at least allow the users to fix their repos: change the fatal error into a warning. Reported-by: mathstuf@gmail.com Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--attr.c8
-rwxr-xr-xt/t0003-attributes.sh3
2 files changed, 7 insertions, 4 deletions
diff --git a/attr.c b/attr.c
index 8985c5c..d181d98 100644
--- a/attr.c
+++ b/attr.c
@@ -255,9 +255,11 @@ static struct match_attr *parse_attr_line(const char *line, const char *src,
&res->u.pat.patternlen,
&res->u.pat.flags,
&res->u.pat.nowildcardlen);
- if (res->u.pat.flags & EXC_FLAG_NEGATIVE)
- die(_("Negative patterns are forbidden in git attributes\n"
- "Use '\\!' for literal leading exclamation."));
+ if (res->u.pat.flags & EXC_FLAG_NEGATIVE) {
+ warning(_("Negative patterns are ignored in git attributes\n"
+ "Use '\\!' for literal leading exclamation."));
+ return NULL;
+ }
}
res->is_macro = is_macro;
res->num_attr = num_attr;
diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh
index 807b8b8..1035a14 100755
--- a/t/t0003-attributes.sh
+++ b/t/t0003-attributes.sh
@@ -198,7 +198,8 @@ test_expect_success 'root subdir attribute test' '
test_expect_success 'negative patterns' '
echo "!f test=bar" >.gitattributes &&
- test_must_fail git check-attr test -- f
+ git check-attr test -- '"'"'!f'"'"' 2>errors &&
+ test_i18ngrep "Negative patterns are ignored" errors
'
test_expect_success 'patterns starting with exclamation' '