Re: git check-ignore ignores negated entries

2018-09-21 Thread Duy Nguyen
On Thu, Sep 20, 2018 at 7:25 PM David Alphus  wrote:
> In looking through check-ignore.c, it appears that we check that
> last_exclude_matching() returns an exclude object. It should be noted
> that we do not consider that exclude struct can be set with the
> EXC_FLAG_NEGATIVE flag. This flag says that the final matching rule
> should not be ignored.
> check_ignore needs to consider this condition in order to work properly.

I haven't checked the code yet. But since you already did, patches are
welcome ;-)
-- 
Duy


git check-ignore ignores negated entries

2018-09-20 Thread David Alphus
If a .gitignore contains a ! entry, git check-ignore will still say
the matching file is ignored if the file is not in the index.

Simple case to reproduce:

$ git init .
$ echo "*.c" > .gitignore
$ echo '!a.c' >> .gitignore
$ touch a.c b.c
$ git check-ignore a.c b.c
a.c
b.c
$ git add *.c
The following paths are ignored by one of your .gitignore files:
b.c
Use -f if you really want to add them.
$ git check-ignore a.c b.c
b.c
$ git check-ignore --no-index a.c b.c
a.c
b.c
$ git check-ignore --no-index --verbose a.c b.c
.gitignore:2:!a.c   a.c
.gitignore:1:*.cb.c

In looking through check-ignore.c, it appears that we check that
last_exclude_matching() returns an exclude object. It should be noted
that we do not consider that exclude struct can be set with the
EXC_FLAG_NEGATIVE flag. This flag says that the final matching rule
should not be ignored.
check_ignore needs to consider this condition in order to work properly.