diff options
author | Russell Belfer <arrbee@arrbee.com> | 2012-02-01 12:30:35 -0800 |
---|---|---|
committer | Russell Belfer <arrbee@arrbee.com> | 2012-02-01 12:30:35 -0800 |
commit | e8c96ed2a74a4fcd9789721b4ebfd78586b3a16f (patch) | |
tree | 9cb7c7a096c76c8b0ec05289c42ffff2baef042c | |
parent | 62a1f713de384e141045facf3c1a53d9642e8eb5 (diff) | |
download | libgit2-e8c96ed2a74a4fcd9789721b4ebfd78586b3a16f.tar.gz |
Add unit tests for recent bug fixes
Add unit tests to confirm ignore directory pattern matches and
to confirm that ignore and attribute files are loaded properly
into the attribute file cache.
-rw-r--r-- | src/attr.c | 7 | ||||
-rw-r--r-- | src/attr.h | 3 | ||||
-rw-r--r-- | tests-clar/attr/repo.c | 5 | ||||
-rw-r--r-- | tests-clar/status/ignore.c | 12 | ||||
-rw-r--r-- | tests/resources/attr/dir/file | 0 | ||||
-rw-r--r-- | tests/resources/attr/gitignore | 1 | ||||
-rw-r--r-- | tests/resources/attr/sub/dir/file | 0 | ||||
-rw-r--r-- | tests/resources/attr/sub/sub/dir | 0 |
8 files changed, 28 insertions, 0 deletions
diff --git a/src/attr.c b/src/attr.c index ddcc3dcf0..17571f6a8 100644 --- a/src/attr.c +++ b/src/attr.c @@ -210,6 +210,13 @@ int git_attr_add_macro( return error; } +int git_attr_cache__is_cached(git_repository *repo, const char *path) +{ + const char *cache_key = path; + if (repo && git__prefixcmp(cache_key, git_repository_workdir(repo)) == 0) + cache_key += strlen(git_repository_workdir(repo)); + return (git_hashtable_lookup(repo->attrcache.files, cache_key) == NULL); +} /* add git_attr_file to vector of files, loading if needed */ int git_attr_cache__push_file( diff --git a/src/attr.h b/src/attr.h index a758cc4bd..ea27259f1 100644 --- a/src/attr.h +++ b/src/attr.h @@ -27,4 +27,7 @@ extern int git_attr_cache__push_file( const char *filename, int (*loader)(git_repository *, const char *, git_attr_file *)); +/* returns GIT_SUCCESS if path is in cache */ +extern int git_attr_cache__is_cached(git_repository *repo, const char *path); + #endif diff --git a/tests-clar/attr/repo.c b/tests-clar/attr/repo.c index 6fc36d2b6..7a716042a 100644 --- a/tests-clar/attr/repo.c +++ b/tests-clar/attr/repo.c @@ -1,6 +1,7 @@ #include "clar_libgit2.h" #include "fileops.h" #include "git2/attr.h" +#include "attr.h" static git_repository *g_repo = NULL; @@ -89,6 +90,10 @@ void test_attr_repo__get_one(void) git_buf_free(&b); } + + cl_git_pass(git_attr_cache__is_cached(g_repo, ".git/info/attributes")); + cl_git_pass(git_attr_cache__is_cached(g_repo, ".gitattributes")); + cl_git_pass(git_attr_cache__is_cached(g_repo, "sub/.gitattributes")); } void test_attr_repo__get_many(void) diff --git a/tests-clar/status/ignore.c b/tests-clar/status/ignore.c index 3a66b3a7a..67aecba31 100644 --- a/tests-clar/status/ignore.c +++ b/tests-clar/status/ignore.c @@ -1,6 +1,7 @@ #include "clar_libgit2.h" #include "fileops.h" #include "git2/attr.h" +#include "attr.h" static git_repository *g_repo = NULL; @@ -29,6 +30,7 @@ void test_status_ignore__0(void) const char *path; int expected; } test_cases[] = { + /* patterns "sub" and "ign" from .gitignore */ { "file", 0 }, { "ign", 1 }, { "sub", 1 }, @@ -38,6 +40,12 @@ void test_status_ignore__0(void) { "sub/sub/file", 0 }, { "sub/sub/ign", 1 }, { "sub/sub/sub", 1 }, + /* pattern "dir/" from .gitignore */ + { "dir", 1 }, + { "dir/", 1 }, + { "sub/dir", 1 }, + { "sub/dir/", 1 }, + { "sub/sub/dir", 0 }, /* dir is not actually a dir, but a file */ { NULL, 0 } }, *one_test; @@ -46,4 +54,8 @@ void test_status_ignore__0(void) cl_git_pass(git_status_should_ignore(g_repo, one_test->path, &ignored)); cl_assert_(ignored == one_test->expected, one_test->path); } + + /* confirm that ignore files were cached */ + cl_git_pass(git_attr_cache__is_cached(g_repo, ".git/info/exclude")); + cl_git_pass(git_attr_cache__is_cached(g_repo, ".gitignore")); } diff --git a/tests/resources/attr/dir/file b/tests/resources/attr/dir/file new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/resources/attr/dir/file diff --git a/tests/resources/attr/gitignore b/tests/resources/attr/gitignore index 66f77694e..546d48f3a 100644 --- a/tests/resources/attr/gitignore +++ b/tests/resources/attr/gitignore @@ -1,2 +1,3 @@ sub ign +dir/ diff --git a/tests/resources/attr/sub/dir/file b/tests/resources/attr/sub/dir/file new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/resources/attr/sub/dir/file diff --git a/tests/resources/attr/sub/sub/dir b/tests/resources/attr/sub/sub/dir new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/resources/attr/sub/sub/dir |