All of lore.kernel.org
 help / color / mirror / Atom feed
* git check-ignore returns 0 for negated masks
@ 2019-11-19 14:01 marat
  2019-11-20  3:48 ` Junio C Hamano
  0 siblings, 1 reply; 2+ messages in thread
From: marat @ 2019-11-19 14:01 UTC (permalink / raw)
  To: git

Way to reproduce:

$ git --version
git version 2.24.0
$ mkdir /tmp/checkignore
$ cd /tmp/checkignore
$ git init
Initialized empty Git repository in /tmp/checkignore/.git/
$ echo '!*.txt' > .gitignore
$ git check-ignore 1.txt
1.txt
$ echo $?
0

I believe this is a bug because it contradicts check-ignore documentation:

  0 - One or more of the provided paths is ignored.
  1 - None of the provided paths are ignored.

This bug isn't hard to fix, however:

1. That causes several tests to fail because they test for exit code that I concider to be wrong.
2. I'm not sure how to handle negated masks when check-ignore prints matching patterns.
   Printing what pattern caused file to be *not* ignored seems useful,
   but others may think that there's "mask is printed iff the file is ignored" rule.

diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c
index 5a4f92395f..d0711434e6 100644
--- a/builtin/check-ignore.c
+++ b/builtin/check-ignore.c
@@ -111,7 +111,7 @@ static int check_ignore(struct dir_struct *dir,
                }
                if (!quiet && (pattern || show_non_matching))
                        output_pattern(pathspec.items[i].original, pattern);
-               if (pattern)
+               if (pattern && !(pattern->flags & PATTERN_FLAG_NEGATIVE))
                        num_ignored++;
        }
        free(seen);

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: git check-ignore returns 0 for negated masks
  2019-11-19 14:01 git check-ignore returns 0 for negated masks marat
@ 2019-11-20  3:48 ` Junio C Hamano
  0 siblings, 0 replies; 2+ messages in thread
From: Junio C Hamano @ 2019-11-20  3:48 UTC (permalink / raw)
  To: marat; +Cc: git

marat@seldon.slonopotamus.org writes:

> I believe this is a bug because it contradicts check-ignore documentation:
>
>   0 - One or more of the provided paths is ignored.
>   1 - None of the provided paths are ignored.

I think the doc was written with primarily positive entries in mind
(it might even predate the introduction of the feature to allow
negative entries in the file), so it might need to be adjusted with
something like s/be ignored/match the pattern/, perhaps?


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-11-20  3:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-19 14:01 git check-ignore returns 0 for negated masks marat
2019-11-20  3:48 ` Junio C Hamano

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.