summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2019-04-07 19:07:42 +0900
committerGitHub <noreply@github.com>2019-04-07 19:07:42 +0900
commit5a190ad31d7e30eaa2f6da3fb563eebbe4050d59 (patch)
tree0a71134bad7eafcfd24c677b38bbcc8e3198ac6d
parentaeea1c463941806a0176859c06c0e2e9716efcb0 (diff)
parent9d117e20119ffa1814253d822598d33721d04ece (diff)
downloadlibgit2-5a190ad31d7e30eaa2f6da3fb563eebbe4050d59.tar.gz
Merge pull request #5040 from pks-t/pks/ignore-treat-dirpaths-as-dir
ignore: treat paths with trailing "/" as directories
-rw-r--r--src/ignore.c4
-rw-r--r--tests/attr/ignore.c16
2 files changed, 19 insertions, 1 deletions
diff --git a/src/ignore.c b/src/ignore.c
index c6e4da705..5427efa29 100644
--- a/src/ignore.c
+++ b/src/ignore.c
@@ -534,7 +534,9 @@ int git_ignore_path_is_ignored(
memset(&path, 0, sizeof(path));
memset(&ignores, 0, sizeof(ignores));
- if (git_repository_is_bare(repo))
+ if (!git__suffixcmp(pathname, "/"))
+ dir_flag = GIT_DIR_FLAG_TRUE;
+ else if (git_repository_is_bare(repo))
dir_flag = GIT_DIR_FLAG_FALSE;
if ((error = git_attr_path__init(&path, pathname, workdir, dir_flag)) < 0 ||
diff --git a/tests/attr/ignore.c b/tests/attr/ignore.c
index 110304a81..1bf06fc1f 100644
--- a/tests/attr/ignore.c
+++ b/tests/attr/ignore.c
@@ -397,3 +397,19 @@ void test_attr_ignore__ignored_subdirfiles_with_negations(void)
assert_is_ignored(true, "dir/sub1/c.test");
}
+void test_attr_ignore__negative_directory_rules_only_match_directories(void)
+{
+ cl_git_rewritefile(
+ "attr/.gitignore",
+ "*\n"
+ "!/**/\n"
+ "!*.keep\n"
+ "!.gitignore\n"
+ );
+
+ assert_is_ignored(true, "src");
+ assert_is_ignored(true, "src/A");
+ assert_is_ignored(false, "src/");
+ assert_is_ignored(false, "src/A.keep");
+ assert_is_ignored(false, ".gitignore");
+}