threads / discuss / 52292

git check-ignore returns 0 for negated masks

Subject: git check-ignore returns 0 for negated masks

## tl;dr

2 messages between Nov 19, 2019 and Nov 20, 2019.

replies: 1people: 2as markdown or json

marat@seldon.slonopotamus.org· Nov 19, 2019, 14:01 UTC · lore
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);
Junio C Hamano· Nov 20, 2019, 03:48 UTC · re: marat@seldon.slonopotamus.org · lore

Re: git check-ignore returns 0 for negated masks

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?

← back to recent threads