summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2019-06-06 09:47:43 -0400
committerGitHub <noreply@github.com>2019-06-06 09:47:43 -0400
commit4de6eb5b8ba559c1f18a6e7631d7800e294849c8 (patch)
tree613a17a62b42c9a02f4911422cff354317319f4a
parentb1795e0da2c5c1f9429fedd2fa0b679ccca0f586 (diff)
parente269b34319664cd65d45875f11f3e1b8f7179428 (diff)
downloadlibgit2-4de6eb5b8ba559c1f18a6e7631d7800e294849c8.tar.gz
Merge pull request #5074 from libgit2/ethomson/ignore_leading_slash
Ignore: only treat one leading slash as a root identifier
-rw-r--r--src/attr_file.c3
-rw-r--r--tests/status/ignore.c24
2 files changed, 26 insertions, 1 deletions
diff --git a/src/attr_file.c b/src/attr_file.c
index aef3e64af..51ecfbb8e 100644
--- a/src/attr_file.c
+++ b/src/attr_file.c
@@ -622,7 +622,8 @@ int git_attr_fnmatch__parse(
if (*scan == '/') {
spec->flags = spec->flags | GIT_ATTR_FNMATCH_FULLPATH;
slash_count++;
- if (pattern == scan)
+
+ if (slash_count == 1 && pattern == scan)
pattern++;
}
/* remember if we see an unescaped wildcard in pattern */
diff --git a/tests/status/ignore.c b/tests/status/ignore.c
index c43f31458..a93ff8b56 100644
--- a/tests/status/ignore.c
+++ b/tests/status/ignore.c
@@ -413,6 +413,30 @@ void test_status_ignore__leading_slash_ignores(void)
cl_assert_equal_i(0, counts.wrong_sorted_path);
}
+void test_status_ignore__multiple_leading_slash(void)
+{
+ static const char *test_files[] = {
+ "empty_standard_repo/a.test",
+ "empty_standard_repo/b.test",
+ "empty_standard_repo/c.test",
+ "empty_standard_repo/d.test",
+ NULL
+ };
+
+ make_test_data("empty_standard_repo", test_files);
+ cl_git_mkfile(
+ "empty_standard_repo/.gitignore",
+ "a.test\n"
+ "/b.test\n"
+ "//c.test\n"
+ "///d.test\n");
+
+ assert_is_ignored("a.test");
+ assert_is_ignored("b.test");
+ refute_is_ignored("c.test");
+ refute_is_ignored("d.test");
+}
+
void test_status_ignore__contained_dir_with_matching_name(void)
{
static const char *test_files[] = {