On Sat, Mar 2, 2013 at 3:06 AM, Thomas Rast <trast@xxxxxxxxxxxxxxx> wrote: > 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. I agree we should not break existing .gitattributes. So yes, die()ing here sounds bad. But.. > @@ -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; > + } This "return NULL;" means we ignore "!blah" pattern, which is a regression, isn't it? Should we treat '!' as literal here? -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html