diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2019-04-07 19:07:42 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-07 19:07:42 +0900 |
commit | 5a190ad31d7e30eaa2f6da3fb563eebbe4050d59 (patch) | |
tree | 0a71134bad7eafcfd24c677b38bbcc8e3198ac6d | |
parent | aeea1c463941806a0176859c06c0e2e9716efcb0 (diff) | |
parent | 9d117e20119ffa1814253d822598d33721d04ece (diff) | |
download | libgit2-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.c | 4 | ||||
-rw-r--r-- | tests/attr/ignore.c | 16 |
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"); +} |