]> git.proxmox.com Git - libgit2.git/blame - tests/config/include.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / tests / config / include.c
CommitLineData
d8d25acb 1#include "clar_libgit2.h"
22a2d3d5 2#include "futils.h"
d8d25acb 3
eae0bfdc
PP
4static git_config *cfg;
5static git_buf buf;
6
7void test_config_include__initialize(void)
8{
e579e0f7
MB
9 cfg = NULL;
10 memset(&buf, 0, sizeof(git_buf));
eae0bfdc
PP
11}
12
13void test_config_include__cleanup(void)
d8d25acb 14{
e579e0f7
MB
15 git_config_free(cfg);
16 git_buf_dispose(&buf);
eae0bfdc 17}
d8d25acb 18
eae0bfdc
PP
19void test_config_include__relative(void)
20{
d8d25acb
CMN
21 cl_git_pass(git_config_open_ondisk(&cfg, cl_fixture("config/config-include")));
22
9a97f49e 23 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar.baz"));
e579e0f7 24 cl_assert_equal_s("huzzah", buf.ptr);
d8d25acb
CMN
25}
26
27void test_config_include__absolute(void)
28{
e579e0f7
MB
29 git_str cfgdata = GIT_STR_INIT;
30 cl_git_pass(git_str_printf(&cfgdata, "[include]\npath = %s/config-included", cl_fixture("config")));
31
32 cl_git_mkfile("config-include-absolute", cfgdata.ptr);
33 git_str_dispose(&cfgdata);
d8d25acb 34
d8d25acb
CMN
35 cl_git_pass(git_config_open_ondisk(&cfg, "config-include-absolute"));
36
9a97f49e 37 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar.baz"));
e579e0f7 38 cl_assert_equal_s("huzzah", buf.ptr);
6c7cee42
RD
39
40 cl_git_pass(p_unlink("config-include-absolute"));
d8d25acb
CMN
41}
42
43void test_config_include__homedir(void)
44{
d8d25acb
CMN
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");
47
48 cl_git_pass(git_config_open_ondisk(&cfg, "config-include-homedir"));
49
9a97f49e 50 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar.baz"));
e579e0f7 51 cl_assert_equal_s("huzzah", buf.ptr);
d8d25acb 52
8487e237 53 cl_sandbox_set_search_path_defaults();
6c7cee42
RD
54
55 cl_git_pass(p_unlink("config-include-homedir"));
d8d25acb 56}
a9fb7989 57
73fc5e01
CMN
58/* We need to pretend that the variables were defined where the file was included */
59void test_config_include__ordering(void)
60{
73fc5e01
CMN
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");
66
67 cl_git_pass(git_config_open_ondisk(&cfg, "including"));
68
9a97f49e 69 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar.frotz"));
e579e0f7
MB
70 cl_assert_equal_s("hiya", buf.ptr);
71 git_buf_dispose(&buf);
9a97f49e 72 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar.baz"));
e579e0f7 73 cl_assert_equal_s("huzzah", buf.ptr);
6c7cee42
RD
74
75 cl_git_pass(p_unlink("included"));
76 cl_git_pass(p_unlink("including"));
73fc5e01 77}
53ea0513
CMN
78
79/* We need to pretend that the variables were defined where the file was included */
80void test_config_include__depth(void)
81{
53ea0513
CMN
82 cl_git_mkfile("a", "[include]\npath = b");
83 cl_git_mkfile("b", "[include]\npath = a");
84
85 cl_git_fail(git_config_open_ondisk(&cfg, "a"));
86
6c7cee42
RD
87 cl_git_pass(p_unlink("a"));
88 cl_git_pass(p_unlink("b"));
89}
90
91void test_config_include__empty_path_sanely_handled(void)
92{
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"));
e579e0f7 96 cl_assert_equal_s("", buf.ptr);
6c7cee42
RD
97
98 cl_git_pass(p_unlink("a"));
53ea0513 99}
727ae380
JF
100
101void test_config_include__missing(void)
102{
ebc13b2b 103 cl_git_mkfile("including", "[include]\npath = nonexistentfile\n[foo]\nbar = baz");
047fe29c 104
ac3d33df 105 git_error_clear();
047fe29c 106 cl_git_pass(git_config_open_ondisk(&cfg, "including"));
ac3d33df 107 cl_assert(git_error_last() == NULL);
047fe29c 108 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar"));
e579e0f7 109 cl_assert_equal_s("baz", buf.ptr);
6c7cee42
RD
110
111 cl_git_pass(p_unlink("including"));
047fe29c
SD
112}
113
114void test_config_include__missing_homedir(void)
115{
ed812ee7 116 cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, cl_fixture("config")));
047fe29c 117 cl_git_mkfile("including", "[include]\npath = ~/.nonexistentfile\n[foo]\nbar = baz");
727ae380 118
ac3d33df 119 git_error_clear();
ebc13b2b 120 cl_git_pass(git_config_open_ondisk(&cfg, "including"));
ac3d33df 121 cl_assert(git_error_last() == NULL);
9a97f49e 122 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar"));
e579e0f7 123 cl_assert_equal_s("baz", buf.ptr);
727ae380 124
ed812ee7 125 cl_sandbox_set_search_path_defaults();
6c7cee42 126 cl_git_pass(p_unlink("including"));
727ae380 127}
3ea78f24
YK
128
129#define replicate10(s) s s s s s s s s s s
130void test_config_include__depth2(void)
131{
3ea78f24
YK
132 const char *content = "[include]\n" replicate10(replicate10("path=bottom\n"));
133
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");
137
138 cl_git_pass(git_config_open_ondisk(&cfg, "top-level"));
139
9a97f49e 140 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar"));
e579e0f7 141 cl_assert_equal_s("baz", buf.ptr);
3ea78f24 142
e579e0f7 143 git_buf_dispose(&buf);
9a97f49e 144 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar2"));
e579e0f7 145 cl_assert_equal_s("baz2", buf.ptr);
6c7cee42
RD
146
147 cl_git_pass(p_unlink("top-level"));
148 cl_git_pass(p_unlink("middle"));
149 cl_git_pass(p_unlink("bottom"));
eae0bfdc 150}
3ea78f24 151
eae0bfdc
PP
152void test_config_include__removing_include_removes_values(void)
153{
154 cl_git_mkfile("top-level", "[include]\npath = included");
155 cl_git_mkfile("included", "[foo]\nbar = value");
156
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"));
6c7cee42
RD
160
161 cl_git_pass(p_unlink("top-level"));
162 cl_git_pass(p_unlink("included"));
eae0bfdc
PP
163}
164
165void test_config_include__rewriting_include_refreshes_values(void)
166{
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");
170
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");
6c7cee42
RD
176
177 cl_git_pass(p_unlink("top-level"));
178 cl_git_pass(p_unlink("first"));
179 cl_git_pass(p_unlink("second"));
eae0bfdc
PP
180}
181
c25aa7cd
PP
182void test_config_include__rewriting_include_twice_refreshes_values(void)
183{
184 cl_git_mkfile("top-level", "[include]\npath = included");
185 cl_git_mkfile("included", "[foo]\nbar = first-value");
186
187 cl_git_pass(git_config_open_ondisk(&cfg, "top-level"));
188 cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar"));
189
e579e0f7 190 git_buf_dispose(&buf);
c25aa7cd
PP
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");
195
e579e0f7 196 git_buf_dispose(&buf);
c25aa7cd
PP
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");
201
202 cl_git_pass(p_unlink("top-level"));
203 cl_git_pass(p_unlink("included"));
204}
205
eae0bfdc
PP
206void test_config_include__included_variables_cannot_be_deleted(void)
207{
208 cl_git_mkfile("top-level", "[include]\npath = included\n");
209 cl_git_mkfile("included", "[foo]\nbar = value");
210
211 cl_git_pass(git_config_open_ondisk(&cfg, "top-level"));
212 cl_git_fail(git_config_delete_entry(cfg, "foo.bar"));
6c7cee42
RD
213
214 cl_git_pass(p_unlink("top-level"));
215 cl_git_pass(p_unlink("included"));
eae0bfdc
PP
216}
217
218void test_config_include__included_variables_cannot_be_modified(void)
219{
220 cl_git_mkfile("top-level", "[include]\npath = included\n");
6c7cee42 221
eae0bfdc
PP
222 cl_git_mkfile("included", "[foo]\nbar = value");
223
224 cl_git_pass(git_config_open_ondisk(&cfg, "top-level"));
225 cl_git_fail(git_config_set_string(cfg, "foo.bar", "other-value"));
6c7cee42
RD
226
227 cl_git_pass(p_unlink("top-level"));
228 cl_git_pass(p_unlink("included"));
3ea78f24 229}
22a2d3d5
UG
230
231void test_config_include__variables_in_included_override_including(void)
232{
233 int i;
234
235 cl_git_mkfile("top-level", "[foo]\nbar = 1\n[include]\npath = included");
236 cl_git_mkfile("included", "[foo]\nbar = 2");
237
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);
241
242 cl_git_pass(p_unlink("top-level"));
243 cl_git_pass(p_unlink("included"));
244}
245
246void test_config_include__variables_in_including_override_included(void)
247{
248 int i;
249
250 cl_git_mkfile("top-level", "[include]\npath = included\n[foo]\nbar = 1");
251 cl_git_mkfile("included", "[foo]\nbar = 2");
252
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);
256
257 cl_git_pass(p_unlink("top-level"));
258 cl_git_pass(p_unlink("included"));
259}