]> git.proxmox.com Git - libgit2.git/commitdiff
Add unit tests for recent bug fixes
authorRussell Belfer <arrbee@arrbee.com>
Wed, 1 Feb 2012 20:30:35 +0000 (12:30 -0800)
committerRussell Belfer <arrbee@arrbee.com>
Wed, 1 Feb 2012 20:30:35 +0000 (12:30 -0800)
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.

src/attr.c
src/attr.h
tests-clar/attr/repo.c
tests-clar/status/ignore.c
tests/resources/attr/dir/file [new file with mode: 0644]
tests/resources/attr/gitignore
tests/resources/attr/sub/dir/file [new file with mode: 0644]
tests/resources/attr/sub/sub/dir [new file with mode: 0644]

index ddcc3dcf045da73d08da1f2c94db1d3a74c43a21..17571f6a8757a377925ff8ac210e82d7be1ce90a 100644 (file)
@@ -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(
index a758cc4bd154f43b5eead2cc1d850c8d3ab15cf1..ea27259f15887c33451c3e70ece209c1a3b56f44 100644 (file)
@@ -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
index 6fc36d2b69bc95fc9c77b8c9537c7b83758ee0b6..7a716042ad96fdc19246bdbb63063f07ebb510b2 100644 (file)
@@ -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)
index 3a66b3a7ad085ec58626542ce032fc1c2aa8adba..67aecba315f90a1b867b4b33125bfea10328f3ac 100644 (file)
@@ -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 (file)
index 0000000..e69de29
index 66f77694ea49902ea9713f34aca437d69ef555bd..546d48f3a35f2d43a0d23f60f5de4c13d807d2cb 100644 (file)
@@ -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 (file)
index 0000000..e69de29
diff --git a/tests/resources/attr/sub/sub/dir b/tests/resources/attr/sub/sub/dir
new file mode 100644 (file)
index 0000000..e69de29