diff options
| author | Russell Belfer <arrbee@arrbee.com> | 2012-01-16 16:58:27 -0800 |
|---|---|---|
| committer | Russell Belfer <arrbee@arrbee.com> | 2012-01-16 16:58:27 -0800 |
| commit | a51cd8e6f6724079a552b75e014f792f3f68e158 (patch) | |
| tree | fcf526f2a7575e215d95589d1a8e07277981fd18 /tests-clay | |
| parent | 6e03b12f5715cb3f5cb5c8be6512e041cdf44a05 (diff) | |
| download | libgit2-a51cd8e6f6724079a552b75e014f792f3f68e158.tar.gz | |
Fix handling of relative paths for attrs
Per issue #533, the handling of relative paths in attribute
and ignore files was not right. Fixed this by pre-joining
the relative path of the attribute/ignore file onto the match
string when a full path match is required.
Unfortunately, fixing this required a bit more code than I
would have liked because I had to juggle things around so that
the fnmatch parser would have sufficient information to prepend
the relative path when it was needed.
Diffstat (limited to 'tests-clay')
| -rw-r--r-- | tests-clay/attr/file.c | 20 | ||||
| -rw-r--r-- | tests-clay/attr/lookup.c | 25 | ||||
| -rw-r--r-- | tests-clay/attr/repo.c | 47 | ||||
| -rw-r--r-- | tests-clay/status/ignore.c | 49 |
4 files changed, 102 insertions, 39 deletions
diff --git a/tests-clay/attr/file.c b/tests-clay/attr/file.c index acca0c653..652ee273c 100644 --- a/tests-clay/attr/file.c +++ b/tests-clay/attr/file.c @@ -6,11 +6,12 @@ void test_attr_file__simple_read(void) { - git_attr_file *file = NULL; + git_attr_file *file; git_attr_assignment *assign; git_attr_rule *rule; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr0"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr0"), file)); cl_assert_strequal(cl_fixture("attr/attr0"), file->path); cl_assert(file->rules.length == 1); @@ -32,11 +33,12 @@ void test_attr_file__simple_read(void) void test_attr_file__match_variants(void) { - git_attr_file *file = NULL; + git_attr_file *file; git_attr_rule *rule; git_attr_assignment *assign; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr1"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr1"), file)); cl_assert_strequal(cl_fixture("attr/attr1"), file->path); cl_assert(file->rules.length == 10); @@ -119,11 +121,12 @@ static void check_one_assign( void test_attr_file__assign_variants(void) { - git_attr_file *file = NULL; + git_attr_file *file; git_attr_rule *rule; git_attr_assignment *assign; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr2"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr2"), file)); cl_assert_strequal(cl_fixture("attr/attr2"), file->path); cl_assert(file->rules.length == 11); @@ -184,11 +187,12 @@ void test_attr_file__assign_variants(void) void test_attr_file__check_attr_examples(void) { - git_attr_file *file = NULL; + git_attr_file *file; git_attr_rule *rule; git_attr_assignment *assign; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr3"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr3"), file)); cl_assert_strequal(cl_fixture("attr/attr3"), file->path); cl_assert(file->rules.length == 3); diff --git a/tests-clay/attr/lookup.c b/tests-clay/attr/lookup.c index fcade5225..b251562ba 100644 --- a/tests-clay/attr/lookup.c +++ b/tests-clay/attr/lookup.c @@ -3,11 +3,12 @@ void test_attr_lookup__simple(void) { - git_attr_file *file = NULL; + git_attr_file *file; git_attr_path path; const char *value = NULL; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr0"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr0"), file)); cl_assert_strequal(cl_fixture("attr/attr0"), file->path); cl_assert(file->rules.length == 1); @@ -60,7 +61,7 @@ static void run_test_cases(git_attr_file *file, test_case *cases) void test_attr_lookup__match_variants(void) { - git_attr_file *file = NULL; + git_attr_file *file; git_attr_path path; test_case cases[] = { /* pat0 -> simple match */ @@ -132,7 +133,8 @@ void test_attr_lookup__match_variants(void) { NULL, NULL, NULL, 0, 0 } }; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr1"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr1"), file)); cl_assert_strequal(cl_fixture("attr/attr1"), file->path); cl_assert(file->rules.length == 10); @@ -146,7 +148,7 @@ void test_attr_lookup__match_variants(void) void test_attr_lookup__assign_variants(void) { - git_attr_file *file = NULL; + git_attr_file *file; test_case cases[] = { /* pat0 -> simple assign */ { "pat0", "simple", GIT_ATTR_TRUE, 0, 0 }, @@ -190,7 +192,8 @@ void test_attr_lookup__assign_variants(void) { NULL, NULL, NULL, 0, 0 } }; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr2"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr2"), file)); cl_assert(file->rules.length == 11); run_test_cases(file, cases); @@ -200,7 +203,7 @@ void test_attr_lookup__assign_variants(void) void test_attr_lookup__check_attr_examples(void) { - git_attr_file *file = NULL; + git_attr_file *file; test_case cases[] = { { "foo.java", "diff", "java", 1, 0 }, { "foo.java", "crlf", GIT_ATTR_FALSE, 0, 0 }, @@ -224,7 +227,8 @@ void test_attr_lookup__check_attr_examples(void) { NULL, NULL, NULL, 0, 0 } }; - cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr3"), &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_file(NULL, cl_fixture("attr/attr3"), file)); cl_assert(file->rules.length == 3); run_test_cases(file, cases); @@ -234,7 +238,7 @@ void test_attr_lookup__check_attr_examples(void) void test_attr_lookup__from_buffer(void) { - git_attr_file *file = NULL; + git_attr_file *file; test_case cases[] = { { "abc", "foo", GIT_ATTR_TRUE, 0, 0 }, { "abc", "bar", GIT_ATTR_TRUE, 0, 0 }, @@ -248,7 +252,8 @@ void test_attr_lookup__from_buffer(void) { NULL, NULL, NULL, 0, 0 } }; - cl_git_pass(git_attr_file__from_buffer(NULL, "a* foo\nabc bar\n* baz", &file)); + cl_git_pass(git_attr_file__new(&file)); + cl_git_pass(git_attr_file__from_buffer(NULL, "a* foo\nabc bar\n* baz", file)); cl_assert(file->rules.length == 3); run_test_cases(file, cases); diff --git a/tests-clay/attr/repo.c b/tests-clay/attr/repo.c index 3e9b9de1b..13f28ca84 100644 --- a/tests-clay/attr/repo.c +++ b/tests-clay/attr/repo.c @@ -45,19 +45,24 @@ void test_attr_repo__get_one(void) { "root_test3", "rootattr", NULL }, { "root_test3", "multiattr", "3" }, { "root_test3", "multi2", NULL }, - { "subdir/subdir_test1", "repoattr", GIT_ATTR_TRUE }, - { "subdir/subdir_test1", "rootattr", GIT_ATTR_TRUE }, - { "subdir/subdir_test1", "missingattr", NULL }, - { "subdir/subdir_test1", "subattr", "yes" }, - { "subdir/subdir_test1", "negattr", GIT_ATTR_FALSE }, - { "subdir/subdir_test1", "another", NULL }, - { "subdir/subdir_test2.txt", "repoattr", GIT_ATTR_TRUE }, - { "subdir/subdir_test2.txt", "rootattr", GIT_ATTR_TRUE }, - { "subdir/subdir_test2.txt", "missingattr", NULL }, - { "subdir/subdir_test2.txt", "subattr", "yes" }, - { "subdir/subdir_test2.txt", "negattr", GIT_ATTR_FALSE }, - { "subdir/subdir_test2.txt", "another", "one" }, + { "sub/subdir_test1", "repoattr", GIT_ATTR_TRUE }, + { "sub/subdir_test1", "rootattr", GIT_ATTR_TRUE }, + { "sub/subdir_test1", "missingattr", NULL }, + { "sub/subdir_test1", "subattr", "yes" }, + { "sub/subdir_test1", "negattr", GIT_ATTR_FALSE }, + { "sub/subdir_test1", "another", NULL }, + { "sub/subdir_test2.txt", "repoattr", GIT_ATTR_TRUE }, + { "sub/subdir_test2.txt", "rootattr", GIT_ATTR_TRUE }, + { "sub/subdir_test2.txt", "missingattr", NULL }, + { "sub/subdir_test2.txt", "subattr", "yes" }, + { "sub/subdir_test2.txt", "negattr", GIT_ATTR_FALSE }, + { "sub/subdir_test2.txt", "another", "zero" }, + { "sub/subdir_test2.txt", "reposub", GIT_ATTR_TRUE }, + { "sub/sub/subdir.txt", "another", "one" }, + { "sub/sub/subdir.txt", "reposubsub", GIT_ATTR_TRUE }, + { "sub/sub/subdir.txt", "reposub", NULL }, { "does-not-exist", "foo", "yes" }, + { "sub/deep/file", "deepdeep", GIT_ATTR_TRUE }, { NULL, NULL, NULL } }, *scan; @@ -105,7 +110,7 @@ void test_attr_repo__get_many(void) cl_assert(values[2] == NULL); cl_assert(values[3] == NULL); - cl_git_pass(git_attr_get_many(g_repo, "subdir/subdir_test1", 4, names, values)); + cl_git_pass(git_attr_get_many(g_repo, "sub/subdir_test1", 4, names, values)); cl_assert(values[0] == GIT_ATTR_TRUE); cl_assert(values[1] == GIT_ATTR_TRUE); @@ -136,33 +141,33 @@ void test_attr_repo__foreach(void) cl_assert(count == 2); count = 0; - cl_git_pass(git_attr_foreach(g_repo, "subdir/subdir_test1", + cl_git_pass(git_attr_foreach(g_repo, "sub/subdir_test1", &count_attrs, &count)); cl_assert(count == 4); /* repoattr, rootattr, subattr, negattr */ count = 0; - cl_git_pass(git_attr_foreach(g_repo, "subdir/subdir_test2.txt", + cl_git_pass(git_attr_foreach(g_repo, "sub/subdir_test2.txt", &count_attrs, &count)); - cl_assert(count == 5); /* repoattr, rootattr, subattr, negattr, another */ + cl_assert(count == 6); /* repoattr, rootattr, subattr, reposub, negattr, another */ } void test_attr_repo__manpage_example(void) { const char *value; - cl_git_pass(git_attr_get(g_repo, "subdir/abc", "foo", &value)); + cl_git_pass(git_attr_get(g_repo, "sub/abc", "foo", &value)); cl_assert(value == GIT_ATTR_TRUE); - cl_git_pass(git_attr_get(g_repo, "subdir/abc", "bar", &value)); + cl_git_pass(git_attr_get(g_repo, "sub/abc", "bar", &value)); cl_assert(value == NULL); - cl_git_pass(git_attr_get(g_repo, "subdir/abc", "baz", &value)); + cl_git_pass(git_attr_get(g_repo, "sub/abc", "baz", &value)); cl_assert(value == GIT_ATTR_FALSE); - cl_git_pass(git_attr_get(g_repo, "subdir/abc", "merge", &value)); + cl_git_pass(git_attr_get(g_repo, "sub/abc", "merge", &value)); cl_assert_strequal("filfre", value); - cl_git_pass(git_attr_get(g_repo, "subdir/abc", "frotz", &value)); + cl_git_pass(git_attr_get(g_repo, "sub/abc", "frotz", &value)); cl_assert(value == NULL); } diff --git a/tests-clay/status/ignore.c b/tests-clay/status/ignore.c new file mode 100644 index 000000000..f14e10c8e --- /dev/null +++ b/tests-clay/status/ignore.c @@ -0,0 +1,49 @@ +#include "clay_libgit2.h" +#include "fileops.h" +#include "git2/attr.h" + +static git_repository *g_repo = NULL; + +void test_status_ignore__initialize(void) +{ + /* Before each test, instantiate the attr repo from the fixtures and + * rename the .gitted to .git so it is a repo with a working dir. Also + * rename gitignore to .gitignore. + */ + cl_fixture_sandbox("attr"); + cl_git_pass(p_rename("attr/.gitted", "attr/.git")); + cl_git_pass(p_rename("attr/gitignore", "attr/.gitignore")); + cl_git_pass(git_repository_open(&g_repo, "attr/.git")); +} + +void test_status_ignore__cleanup(void) +{ + git_repository_free(g_repo); + g_repo = NULL; + cl_fixture_cleanup("attr"); +} + +void test_status_ignore__0(void) +{ + struct { + const char *path; + int expected; + } test_cases[] = { + { "file", 0 }, + { "ign", 1 }, + { "sub", 1 }, + { "sub/file", 0 }, + { "sub/ign", 1 }, + { "sub/sub", 1 }, + { "sub/sub/file", 0 }, + { "sub/sub/ign", 1 }, + { "sub/sub/sub", 1 }, + { NULL, 0 } + }, *one_test; + + for (one_test = test_cases; one_test->path != NULL; one_test++) { + int ignored; + cl_git_pass(git_status_should_ignore(g_repo, one_test->path, &ignored)); + cl_assert_(ignored == one_test->expected, one_test->path); + } +} |
