1 #include "clar_libgit2.h"
2 #include "futils.h"
3 #include "sysdir.h"
4 #include <ctype.h>
5 
6 git_repository *repo;
7 
test_repo_extensions__initialize(void)8 void test_repo_extensions__initialize(void)
9 {
10 	git_config *config;
11 
12 	repo = cl_git_sandbox_init("empty_bare.git");
13 
14 	cl_git_pass(git_repository_config(&config, repo));
15 	cl_git_pass(git_config_set_int32(config, "core.repositoryformatversion", 1));
16 	git_config_free(config);
17 }
18 
test_repo_extensions__cleanup(void)19 void test_repo_extensions__cleanup(void)
20 {
21 	cl_git_sandbox_cleanup();
22 	cl_git_pass(git_libgit2_opts(GIT_OPT_SET_EXTENSIONS, NULL, 0));
23 }
24 
test_repo_extensions__builtin(void)25 void test_repo_extensions__builtin(void)
26 {
27 	git_repository *extended;
28 
29 	cl_repo_set_string(repo, "extensions.noop", "foobar");
30 
31 	cl_git_pass(git_repository_open(&extended, "empty_bare.git"));
32 	cl_assert(git_repository_path(extended) != NULL);
33 	cl_assert(git__suffixcmp(git_repository_path(extended), "/") == 0);
34 	git_repository_free(extended);
35 }
36 
test_repo_extensions__negate_builtin(void)37 void test_repo_extensions__negate_builtin(void)
38 {
39 	const char *in[] = { "foo", "!noop", "baz" };
40 	git_repository *extended;
41 
42 	cl_repo_set_string(repo, "extensions.noop", "foobar");
43 
44 	cl_git_pass(git_libgit2_opts(GIT_OPT_SET_EXTENSIONS, in, ARRAY_SIZE(in)));
45 
46 	cl_git_fail(git_repository_open(&extended, "empty_bare.git"));
47 	git_repository_free(extended);
48 }
49 
test_repo_extensions__unsupported(void)50 void test_repo_extensions__unsupported(void)
51 {
52 	git_repository *extended = NULL;
53 
54 	cl_repo_set_string(repo, "extensions.unknown", "foobar");
55 
56 	cl_git_fail(git_repository_open(&extended, "empty_bare.git"));
57 	git_repository_free(extended);
58 }
59 
test_repo_extensions__adds_extension(void)60 void test_repo_extensions__adds_extension(void)
61 {
62 	const char *in[] = { "foo", "!noop", "newextension", "baz" };
63 	git_repository *extended;
64 
65 	cl_repo_set_string(repo, "extensions.newextension", "foobar");
66 	cl_git_pass(git_libgit2_opts(GIT_OPT_SET_EXTENSIONS, in, ARRAY_SIZE(in)));
67 
68 	cl_git_pass(git_repository_open(&extended, "empty_bare.git"));
69 	cl_assert(git_repository_path(extended) != NULL);
70 	cl_assert(git__suffixcmp(git_repository_path(extended), "/") == 0);
71 	git_repository_free(extended);
72 }
73