summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2019-07-20 11:26:00 +0100
committerGitHub <noreply@github.com>2019-07-20 11:26:00 +0100
commite07dbc92d113fbddd2a042b45ef1a01347492a4c (patch)
tree0729eacdcdc78f7a134ff4d4baa2667b911e15cc
parentfd7a384b6849a407677c592f269603f4075d662a (diff)
parent6f6340afeca17bf0773e2450efc7c96f7ca8bd5d (diff)
downloadlibgit2-e07dbc92d113fbddd2a042b45ef1a01347492a4c.tar.gz
Merge pull request #5173 from pks-t/pks/gitignore-wildmatch-error
ignore: fix determining whether a shorter pattern negates another
-rw-r--r--src/ignore.c7
-rw-r--r--tests/ignore/path.c15
2 files changed, 16 insertions, 6 deletions
diff --git a/src/ignore.c b/src/ignore.c
index 825ab3cf9..c2d99444b 100644
--- a/src/ignore.c
+++ b/src/ignore.c
@@ -141,13 +141,8 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match
if (git_buf_oom(&buf))
goto out;
- if ((error = wildmatch(git_buf_cstr(&buf), path, wildmatch_flags)) < 0) {
- git_error_set(GIT_ERROR_INVALID, "error matching pattern");
- goto out;
- }
-
/* if we found a match, we want to keep this rule */
- if (error != WM_NOMATCH) {
+ if ((wildmatch(git_buf_cstr(&buf), path, wildmatch_flags)) == WM_MATCH) {
*out = 1;
error = 0;
goto out;
diff --git a/tests/ignore/path.c b/tests/ignore/path.c
index 95269959c..5daf32901 100644
--- a/tests/ignore/path.c
+++ b/tests/ignore/path.c
@@ -560,3 +560,18 @@ void test_ignore_path__escaped_space(void)
assert_is_ignored(false, "bar\\\\\\");
assert_is_ignored(false, "bar\\\\\\ ");
}
+
+void test_ignore_path__invalid_pattern(void)
+{
+ cl_git_rewritefile("attr/.gitignore", "[");
+ assert_is_ignored(false, "[f");
+ assert_is_ignored(false, "f");
+}
+
+void test_ignore_path__negative_prefix_rule(void)
+{
+ cl_git_rewritefile("attr/.gitignore", "ff*\n!f\n");
+ assert_is_ignored(true, "fff");
+ assert_is_ignored(true, "ff");
+ assert_is_ignored(false, "f");
+}