]>
git.proxmox.com Git - libgit2.git/blob - tests/config/conditionals.c
564719dcbcf7e897e3bea278fad07f7eb629b500
1 #include "clar_libgit2.h"
3 #include "repository.h"
6 # define ROOT_PREFIX "C:"
11 static git_repository
*_repo
;
13 void test_config_conditionals__initialize(void)
15 _repo
= cl_git_sandbox_init("empty_standard_repo");
18 void test_config_conditionals__cleanup(void)
20 cl_git_sandbox_cleanup();
23 static void assert_condition_includes(const char *keyword
, const char *path
, bool expected
)
25 git_buf value
= GIT_BUF_INIT
;
26 git_str buf
= GIT_STR_INIT
;
29 cl_git_pass(git_str_printf(&buf
, "[includeIf \"%s:%s\"]\n", keyword
, path
));
30 cl_git_pass(git_str_puts(&buf
, "path = other\n"));
32 cl_git_mkfile("empty_standard_repo/.git/config", buf
.ptr
);
33 cl_git_mkfile("empty_standard_repo/.git/other", "[foo]\nbar=baz\n");
34 _repo
= cl_git_sandbox_reopen();
36 git_str_dispose(&buf
);
38 cl_git_pass(git_repository_config(&cfg
, _repo
));
41 cl_git_pass(git_config_get_string_buf(&value
, cfg
, "foo.bar"));
42 cl_assert_equal_s("baz", value
.ptr
);
44 cl_git_fail_with(GIT_ENOTFOUND
,
45 git_config_get_string_buf(&value
, cfg
, "foo.bar"));
48 git_str_dispose(&buf
);
49 git_buf_dispose(&value
);
53 static char *sandbox_path(git_str
*buf
, const char *suffix
)
55 char *path
= p_realpath(clar_sandbox_path(), NULL
);
57 cl_git_pass(git_str_attach(buf
, path
, 0));
58 cl_git_pass(git_str_joinpath(buf
, buf
->ptr
, suffix
));
62 void test_config_conditionals__gitdir(void)
64 git_str path
= GIT_STR_INIT
;
66 assert_condition_includes("gitdir", ROOT_PREFIX
"/", true);
67 assert_condition_includes("gitdir", "empty_stand", false);
68 assert_condition_includes("gitdir", "empty_stand/", false);
69 assert_condition_includes("gitdir", "empty_stand/.git", false);
70 assert_condition_includes("gitdir", "empty_stand/.git/", false);
71 assert_condition_includes("gitdir", "empty_stand*/", true);
72 assert_condition_includes("gitdir", "empty_stand*/.git", true);
73 assert_condition_includes("gitdir", "empty_stand*/.git/", false);
74 assert_condition_includes("gitdir", "empty_standard_repo", false);
75 assert_condition_includes("gitdir", "empty_standard_repo/", true);
76 assert_condition_includes("gitdir", "empty_standard_repo/.git", true);
77 assert_condition_includes("gitdir", "empty_standard_repo/.git/", false);
79 assert_condition_includes("gitdir", "./", false);
81 assert_condition_includes("gitdir", ROOT_PREFIX
"/nonexistent", false);
82 assert_condition_includes("gitdir", ROOT_PREFIX
"/empty_standard_repo", false);
83 assert_condition_includes("gitdir", "~/empty_standard_repo", false);
85 assert_condition_includes("gitdir", sandbox_path(&path
, "/"), true);
86 assert_condition_includes("gitdir", sandbox_path(&path
, "/*"), false);
87 assert_condition_includes("gitdir", sandbox_path(&path
, "/**"), true);
89 assert_condition_includes("gitdir", sandbox_path(&path
, "empty_standard_repo"), false);
90 assert_condition_includes("gitdir", sandbox_path(&path
, "empty_standard_repo/"), true);
91 assert_condition_includes("gitdir", sandbox_path(&path
, "empty_standard_repo/"), true);
92 assert_condition_includes("gitdir", sandbox_path(&path
, "Empty_Standard_Repo"), false);
93 assert_condition_includes("gitdir", sandbox_path(&path
, "Empty_Standard_Repo/"), false);
95 git_str_dispose(&path
);
98 void test_config_conditionals__gitdir_i(void)
100 git_str path
= GIT_STR_INIT
;
102 assert_condition_includes("gitdir/i", sandbox_path(&path
, "empty_standard_repo/"), true);
103 assert_condition_includes("gitdir/i", sandbox_path(&path
, "EMPTY_STANDARD_REPO/"), true);
105 git_str_dispose(&path
);
108 void test_config_conditionals__invalid_conditional_fails(void)
110 assert_condition_includes("foobar", ".git", false);
113 static void set_head(git_repository
*repo
, const char *name
)
115 cl_git_pass(git_repository_create_head(git_repository_path(repo
), name
));
118 void test_config_conditionals__onbranch(void)
120 assert_condition_includes("onbranch", "master", true);
121 assert_condition_includes("onbranch", "m*", true);
122 assert_condition_includes("onbranch", "*", true);
123 assert_condition_includes("onbranch", "master/", false);
124 assert_condition_includes("onbranch", "foo", false);
126 set_head(_repo
, "foo");
127 assert_condition_includes("onbranch", "master", false);
128 assert_condition_includes("onbranch", "foo", true);
129 assert_condition_includes("onbranch", "f*o", true);
131 set_head(_repo
, "dir/ref");
132 assert_condition_includes("onbranch", "dir/ref", true);
133 assert_condition_includes("onbranch", "dir/", true);
134 assert_condition_includes("onbranch", "dir/*", true);
135 assert_condition_includes("onbranch", "dir/**", true);
136 assert_condition_includes("onbranch", "**", true);
137 assert_condition_includes("onbranch", "dir", false);
138 assert_condition_includes("onbranch", "dir*", false);
140 set_head(_repo
, "dir/subdir/ref");
141 assert_condition_includes("onbranch", "dir/subdir/", true);
142 assert_condition_includes("onbranch", "dir/subdir/*", true);
143 assert_condition_includes("onbranch", "dir/subdir/ref", true);
144 assert_condition_includes("onbranch", "dir/", true);
145 assert_condition_includes("onbranch", "dir/**", true);
146 assert_condition_includes("onbranch", "**", true);
147 assert_condition_includes("onbranch", "dir", false);
148 assert_condition_includes("onbranch", "dir*", false);
149 assert_condition_includes("onbranch", "dir/*", false);
152 void test_config_conditionals__empty(void)
154 git_buf value
= GIT_BUF_INIT
;
155 git_str buf
= GIT_STR_INIT
;
158 cl_git_pass(git_str_puts(&buf
, "[includeIf]\n"));
159 cl_git_pass(git_str_puts(&buf
, "path = other\n"));
161 cl_git_mkfile("empty_standard_repo/.git/config", buf
.ptr
);
162 cl_git_mkfile("empty_standard_repo/.git/other", "[foo]\nbar=baz\n");
163 _repo
= cl_git_sandbox_reopen();
165 git_str_dispose(&buf
);
167 cl_git_pass(git_repository_config(&cfg
, _repo
));
169 cl_git_fail_with(GIT_ENOTFOUND
,
170 git_config_get_string_buf(&value
, cfg
, "foo.bar"));
172 git_str_dispose(&buf
);
173 git_buf_dispose(&value
);
174 git_config_free(cfg
);