]>
git.proxmox.com Git - libgit2.git/blob - tests/config/include.c
1 #include "clar_libgit2.h"
4 static git_config
*cfg
;
7 void test_config_include__initialize(void)
10 memset(&buf
, 0, sizeof(git_buf
));
13 void test_config_include__cleanup(void)
16 git_buf_dispose(&buf
);
19 void test_config_include__relative(void)
21 cl_git_pass(git_config_open_ondisk(&cfg
, cl_fixture("config/config-include")));
23 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar.baz"));
24 cl_assert_equal_s("huzzah", buf
.ptr
);
27 void test_config_include__absolute(void)
29 git_str cfgdata
= GIT_STR_INIT
;
30 cl_git_pass(git_str_printf(&cfgdata
, "[include]\npath = %s/config-included", cl_fixture("config")));
32 cl_git_mkfile("config-include-absolute", cfgdata
.ptr
);
33 git_str_dispose(&cfgdata
);
35 cl_git_pass(git_config_open_ondisk(&cfg
, "config-include-absolute"));
37 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar.baz"));
38 cl_assert_equal_s("huzzah", buf
.ptr
);
40 cl_git_pass(p_unlink("config-include-absolute"));
43 void test_config_include__homedir(void)
45 cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH
, GIT_CONFIG_LEVEL_GLOBAL
, cl_fixture("config")));
46 cl_git_mkfile("config-include-homedir", "[include]\npath = ~/config-included");
48 cl_git_pass(git_config_open_ondisk(&cfg
, "config-include-homedir"));
50 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar.baz"));
51 cl_assert_equal_s("huzzah", buf
.ptr
);
53 cl_sandbox_set_search_path_defaults();
55 cl_git_pass(p_unlink("config-include-homedir"));
58 /* We need to pretend that the variables were defined where the file was included */
59 void test_config_include__ordering(void)
61 cl_git_mkfile("included", "[foo \"bar\"]\nbaz = hurrah\nfrotz = hiya");
62 cl_git_mkfile("including",
63 "[foo \"bar\"]\nfrotz = hello\n"
64 "[include]\npath = included\n"
65 "[foo \"bar\"]\nbaz = huzzah\n");
67 cl_git_pass(git_config_open_ondisk(&cfg
, "including"));
69 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar.frotz"));
70 cl_assert_equal_s("hiya", buf
.ptr
);
71 git_buf_dispose(&buf
);
72 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar.baz"));
73 cl_assert_equal_s("huzzah", buf
.ptr
);
75 cl_git_pass(p_unlink("included"));
76 cl_git_pass(p_unlink("including"));
79 /* We need to pretend that the variables were defined where the file was included */
80 void test_config_include__depth(void)
82 cl_git_mkfile("a", "[include]\npath = b");
83 cl_git_mkfile("b", "[include]\npath = a");
85 cl_git_fail(git_config_open_ondisk(&cfg
, "a"));
87 cl_git_pass(p_unlink("a"));
88 cl_git_pass(p_unlink("b"));
91 void test_config_include__empty_path_sanely_handled(void)
93 cl_git_mkfile("a", "[include]\npath");
94 cl_git_pass(git_config_open_ondisk(&cfg
, "a"));
95 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "include.path"));
96 cl_assert_equal_s("", buf
.ptr
);
98 cl_git_pass(p_unlink("a"));
101 void test_config_include__missing(void)
103 cl_git_mkfile("including", "[include]\npath = nonexistentfile\n[foo]\nbar = baz");
106 cl_git_pass(git_config_open_ondisk(&cfg
, "including"));
107 cl_assert(git_error_last() == NULL
);
108 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
109 cl_assert_equal_s("baz", buf
.ptr
);
111 cl_git_pass(p_unlink("including"));
114 void test_config_include__missing_homedir(void)
116 cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH
, GIT_CONFIG_LEVEL_GLOBAL
, cl_fixture("config")));
117 cl_git_mkfile("including", "[include]\npath = ~/.nonexistentfile\n[foo]\nbar = baz");
120 cl_git_pass(git_config_open_ondisk(&cfg
, "including"));
121 cl_assert(git_error_last() == NULL
);
122 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
123 cl_assert_equal_s("baz", buf
.ptr
);
125 cl_sandbox_set_search_path_defaults();
126 cl_git_pass(p_unlink("including"));
129 #define replicate10(s) s s s s s s s s s s
130 void test_config_include__depth2(void)
132 const char *content
= "[include]\n" replicate10(replicate10("path=bottom\n"));
134 cl_git_mkfile("top-level", "[include]\npath = middle\n[foo]\nbar = baz");
135 cl_git_mkfile("middle", content
);
136 cl_git_mkfile("bottom", "[foo]\nbar2 = baz2");
138 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
140 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
141 cl_assert_equal_s("baz", buf
.ptr
);
143 git_buf_dispose(&buf
);
144 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar2"));
145 cl_assert_equal_s("baz2", buf
.ptr
);
147 cl_git_pass(p_unlink("top-level"));
148 cl_git_pass(p_unlink("middle"));
149 cl_git_pass(p_unlink("bottom"));
152 void test_config_include__removing_include_removes_values(void)
154 cl_git_mkfile("top-level", "[include]\npath = included");
155 cl_git_mkfile("included", "[foo]\nbar = value");
157 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
158 cl_git_mkfile("top-level", "");
159 cl_git_fail(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
161 cl_git_pass(p_unlink("top-level"));
162 cl_git_pass(p_unlink("included"));
165 void test_config_include__rewriting_include_refreshes_values(void)
167 cl_git_mkfile("top-level", "[include]\npath = first\n[include]\npath = second");
168 cl_git_mkfile("first", "[first]\nfoo = bar");
169 cl_git_mkfile("second", "[second]\nfoo = bar");
171 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
172 cl_git_mkfile("first", "[first]\nother = value");
173 cl_git_fail(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
174 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "first.other"));
175 cl_assert_equal_s(buf
.ptr
, "value");
177 cl_git_pass(p_unlink("top-level"));
178 cl_git_pass(p_unlink("first"));
179 cl_git_pass(p_unlink("second"));
182 void test_config_include__rewriting_include_twice_refreshes_values(void)
184 cl_git_mkfile("top-level", "[include]\npath = included");
185 cl_git_mkfile("included", "[foo]\nbar = first-value");
187 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
188 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
190 git_buf_dispose(&buf
);
191 cl_git_mkfile("included", "[foo]\nother = value2");
192 cl_git_fail(git_config_get_string_buf(&buf
, cfg
, "foo.bar"));
193 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.other"));
194 cl_assert_equal_s(buf
.ptr
, "value2");
196 git_buf_dispose(&buf
);
197 cl_git_mkfile("included", "[foo]\nanother = bar");
198 cl_git_fail(git_config_get_string_buf(&buf
, cfg
, "foo.other"));
199 cl_git_pass(git_config_get_string_buf(&buf
, cfg
, "foo.another"));
200 cl_assert_equal_s(buf
.ptr
, "bar");
202 cl_git_pass(p_unlink("top-level"));
203 cl_git_pass(p_unlink("included"));
206 void test_config_include__included_variables_cannot_be_deleted(void)
208 cl_git_mkfile("top-level", "[include]\npath = included\n");
209 cl_git_mkfile("included", "[foo]\nbar = value");
211 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
212 cl_git_fail(git_config_delete_entry(cfg
, "foo.bar"));
214 cl_git_pass(p_unlink("top-level"));
215 cl_git_pass(p_unlink("included"));
218 void test_config_include__included_variables_cannot_be_modified(void)
220 cl_git_mkfile("top-level", "[include]\npath = included\n");
222 cl_git_mkfile("included", "[foo]\nbar = value");
224 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
225 cl_git_fail(git_config_set_string(cfg
, "foo.bar", "other-value"));
227 cl_git_pass(p_unlink("top-level"));
228 cl_git_pass(p_unlink("included"));
231 void test_config_include__variables_in_included_override_including(void)
235 cl_git_mkfile("top-level", "[foo]\nbar = 1\n[include]\npath = included");
236 cl_git_mkfile("included", "[foo]\nbar = 2");
238 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
239 cl_git_pass(git_config_get_int32(&i
, cfg
, "foo.bar"));
240 cl_assert_equal_i(i
, 2);
242 cl_git_pass(p_unlink("top-level"));
243 cl_git_pass(p_unlink("included"));
246 void test_config_include__variables_in_including_override_included(void)
250 cl_git_mkfile("top-level", "[include]\npath = included\n[foo]\nbar = 1");
251 cl_git_mkfile("included", "[foo]\nbar = 2");
253 cl_git_pass(git_config_open_ondisk(&cfg
, "top-level"));
254 cl_git_pass(git_config_get_int32(&i
, cfg
, "foo.bar"));
255 cl_assert_equal_i(i
, 1);
257 cl_git_pass(p_unlink("top-level"));
258 cl_git_pass(p_unlink("included"));