]>
Commit | Line | Data |
---|---|---|
959b5455 HV |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2014 Heiko Voigt | |
4 | # | |
5 | ||
6 | test_description='Test submodules config cache infrastructure | |
7 | ||
851e18c3 HV |
8 | This test verifies that parsing .gitmodules configurations directly |
9 | from the database and from the worktree works. | |
959b5455 HV |
10 | ' |
11 | ||
12 | TEST_NO_CREATE_REPO=1 | |
13 | . ./test-lib.sh | |
14 | ||
15 | test_expect_success 'submodule config cache setup' ' | |
16 | mkdir submodule && | |
17 | (cd submodule && | |
18 | git init && | |
19 | echo a >a && | |
20 | git add . && | |
21 | git commit -ma | |
22 | ) && | |
23 | mkdir super && | |
24 | (cd super && | |
25 | git init && | |
26 | git submodule add ../submodule && | |
27 | git submodule add ../submodule a && | |
28 | git commit -m "add as submodule and as a" && | |
29 | git mv a b && | |
30 | git commit -m "move a to b" | |
31 | ) | |
32 | ' | |
33 | ||
5ea50954 BW |
34 | test_expect_success 'configuration parsing with error' ' |
35 | test_when_finished "rm -rf repo" && | |
36 | test_create_repo repo && | |
37 | cat >repo/.gitmodules <<-\EOF && | |
38 | [submodule "s"] | |
39 | path | |
40 | ignore | |
41 | EOF | |
42 | ( | |
43 | cd repo && | |
b6188213 | 44 | test_must_fail test-tool submodule-config "" s 2>actual && |
5ea50954 BW |
45 | test_i18ngrep "bad config" actual |
46 | ) | |
47 | ' | |
48 | ||
959b5455 HV |
49 | cat >super/expect <<EOF |
50 | Submodule name: 'a' for path 'a' | |
51 | Submodule name: 'a' for path 'b' | |
52 | Submodule name: 'submodule' for path 'submodule' | |
53 | Submodule name: 'submodule' for path 'submodule' | |
54 | EOF | |
55 | ||
56 | test_expect_success 'test parsing and lookup of submodule config by path' ' | |
57 | (cd super && | |
b6188213 | 58 | test-tool submodule-config \ |
959b5455 HV |
59 | HEAD^ a \ |
60 | HEAD b \ | |
61 | HEAD^ submodule \ | |
62 | HEAD submodule \ | |
63 | >actual && | |
64 | test_cmp expect actual | |
65 | ) | |
66 | ' | |
67 | ||
68 | test_expect_success 'test parsing and lookup of submodule config by name' ' | |
69 | (cd super && | |
b6188213 | 70 | test-tool submodule-config --name \ |
959b5455 HV |
71 | HEAD^ a \ |
72 | HEAD a \ | |
73 | HEAD^ submodule \ | |
74 | HEAD submodule \ | |
75 | >actual && | |
76 | test_cmp expect actual | |
77 | ) | |
78 | ' | |
79 | ||
80 | cat >super/expect_error <<EOF | |
81 | Submodule name: 'a' for path 'b' | |
82 | Submodule name: 'submodule' for path 'submodule' | |
83 | EOF | |
84 | ||
d1b13df5 | 85 | test_expect_success 'error in history of one submodule config lets continue, stderr message contains blob ref' ' |
996df4d0 AO |
86 | ORIG=$(git -C super rev-parse HEAD) && |
87 | test_when_finished "git -C super reset --hard $ORIG" && | |
959b5455 HV |
88 | (cd super && |
89 | cp .gitmodules .gitmodules.bak && | |
90 | echo " value = \"" >>.gitmodules && | |
91 | git add .gitmodules && | |
92 | mv .gitmodules.bak .gitmodules && | |
93 | git commit -m "add error" && | |
514dea90 | 94 | sha1=$(git rev-parse HEAD) && |
b6188213 | 95 | test-tool submodule-config \ |
514dea90 HV |
96 | HEAD b \ |
97 | HEAD submodule \ | |
d1b13df5 AO |
98 | >actual \ |
99 | 2>actual_stderr && | |
100 | test_cmp expect_error actual && | |
101 | test_i18ngrep "submodule-blob $sha1:.gitmodules" actual_stderr >/dev/null | |
514dea90 HV |
102 | ) |
103 | ' | |
104 | ||
73c293bb SB |
105 | test_expect_success 'using different treeishs works' ' |
106 | ( | |
107 | cd super && | |
108 | git tag new_tag && | |
109 | tree=$(git rev-parse HEAD^{tree}) && | |
110 | commit=$(git rev-parse HEAD^{commit}) && | |
b6188213 NTND |
111 | test-tool submodule-config $commit b >expect && |
112 | test-tool submodule-config $tree b >actual.1 && | |
113 | test-tool submodule-config new_tag b >actual.2 && | |
73c293bb SB |
114 | test_cmp expect actual.1 && |
115 | test_cmp expect actual.2 | |
116 | ) | |
117 | ' | |
118 | ||
027771fc | 119 | test_expect_success 'error in history in fetchrecursesubmodule lets continue' ' |
996df4d0 AO |
120 | ORIG=$(git -C super rev-parse HEAD) && |
121 | test_when_finished "git -C super reset --hard $ORIG" && | |
027771fc HV |
122 | (cd super && |
123 | git config -f .gitmodules \ | |
124 | submodule.submodule.fetchrecursesubmodules blabla && | |
125 | git add .gitmodules && | |
126 | git config --unset -f .gitmodules \ | |
127 | submodule.submodule.fetchrecursesubmodules && | |
128 | git commit -m "add error in fetchrecursesubmodules" && | |
b6188213 | 129 | test-tool submodule-config \ |
027771fc HV |
130 | HEAD b \ |
131 | HEAD submodule \ | |
132 | >actual && | |
996df4d0 | 133 | test_cmp expect_error actual |
027771fc HV |
134 | ) |
135 | ' | |
136 | ||
76e9bdc4 | 137 | test_expect_success 'reading submodules config from the working tree with "submodule--helper config"' ' |
2502ffc0 AO |
138 | (cd super && |
139 | echo "../submodule" >expect && | |
140 | git submodule--helper config submodule.submodule.url >actual && | |
141 | test_cmp expect actual | |
142 | ) | |
143 | ' | |
144 | ||
145 | test_expect_success 'writing submodules config with "submodule--helper config"' ' | |
146 | (cd super && | |
147 | echo "new_url" >expect && | |
148 | git submodule--helper config submodule.submodule.url "new_url" && | |
149 | git submodule--helper config submodule.submodule.url >actual && | |
150 | test_cmp expect actual | |
151 | ) | |
152 | ' | |
153 | ||
154 | test_expect_success 'overwriting unstaged submodules config with "submodule--helper config"' ' | |
155 | test_when_finished "git -C super checkout .gitmodules" && | |
156 | (cd super && | |
157 | echo "newer_url" >expect && | |
158 | git submodule--helper config submodule.submodule.url "newer_url" && | |
159 | git submodule--helper config submodule.submodule.url >actual && | |
160 | test_cmp expect actual | |
161 | ) | |
162 | ' | |
163 | ||
b5c259f2 AO |
164 | test_expect_success 'writeable .gitmodules when it is in the working tree' ' |
165 | git -C super submodule--helper config --check-writeable | |
166 | ' | |
167 | ||
168 | test_expect_success 'writeable .gitmodules when it is nowhere in the repository' ' | |
169 | ORIG=$(git -C super rev-parse HEAD) && | |
170 | test_when_finished "git -C super reset --hard $ORIG" && | |
171 | (cd super && | |
172 | git rm .gitmodules && | |
173 | git commit -m "remove .gitmodules from the current branch" && | |
174 | git submodule--helper config --check-writeable | |
175 | ) | |
176 | ' | |
177 | ||
178 | test_expect_success 'non-writeable .gitmodules when it is in the index but not in the working tree' ' | |
179 | test_when_finished "git -C super checkout .gitmodules" && | |
180 | (cd super && | |
181 | rm -f .gitmodules && | |
182 | test_must_fail git submodule--helper config --check-writeable | |
183 | ) | |
184 | ' | |
185 | ||
186 | test_expect_success 'non-writeable .gitmodules when it is in the current branch but not in the index' ' | |
187 | ORIG=$(git -C super rev-parse HEAD) && | |
188 | test_when_finished "git -C super reset --hard $ORIG" && | |
189 | (cd super && | |
190 | git rm .gitmodules && | |
191 | test_must_fail git submodule--helper config --check-writeable | |
192 | ) | |
193 | ' | |
194 | ||
76e9bdc4 AO |
195 | test_expect_success 'reading submodules config from the index when .gitmodules is not in the working tree' ' |
196 | ORIG=$(git -C super rev-parse HEAD) && | |
197 | test_when_finished "git -C super reset --hard $ORIG" && | |
198 | (cd super && | |
199 | git submodule--helper config submodule.submodule.url "staged_url" && | |
200 | git add .gitmodules && | |
201 | rm -f .gitmodules && | |
202 | echo "staged_url" >expect && | |
203 | git submodule--helper config submodule.submodule.url >actual && | |
204 | test_cmp expect actual | |
205 | ) | |
206 | ' | |
207 | ||
208 | test_expect_success 'reading submodules config from the current branch when .gitmodules is not in the index' ' | |
209 | ORIG=$(git -C super rev-parse HEAD) && | |
210 | test_when_finished "git -C super reset --hard $ORIG" && | |
211 | (cd super && | |
212 | git rm .gitmodules && | |
213 | echo "../submodule" >expect && | |
214 | git submodule--helper config submodule.submodule.url >actual && | |
215 | test_cmp expect actual | |
216 | ) | |
217 | ' | |
218 | ||
2b1257e4 AO |
219 | test_expect_success 'reading nested submodules config' ' |
220 | (cd super && | |
221 | git init submodule/nested_submodule && | |
222 | echo "a" >submodule/nested_submodule/a && | |
223 | git -C submodule/nested_submodule add a && | |
224 | git -C submodule/nested_submodule commit -m "add a" && | |
225 | git -C submodule submodule add ./nested_submodule && | |
226 | git -C submodule add nested_submodule && | |
227 | git -C submodule commit -m "added nested_submodule" && | |
228 | git add submodule && | |
229 | git commit -m "updated submodule" && | |
230 | echo "./nested_submodule" >expect && | |
231 | test-tool submodule-nested-repo-config \ | |
232 | submodule submodule.nested_submodule.url >actual && | |
233 | test_cmp expect actual | |
234 | ) | |
235 | ' | |
236 | ||
237 | # When this test eventually passes, before turning it into | |
238 | # test_expect_success, remember to replace the test_i18ngrep below with | |
239 | # a "test_must_be_empty warning" to be sure that the warning is actually | |
240 | # removed from the code. | |
241 | test_expect_failure 'reading nested submodules config when .gitmodules is not in the working tree' ' | |
242 | test_when_finished "git -C super/submodule checkout .gitmodules" && | |
243 | (cd super && | |
244 | echo "./nested_submodule" >expect && | |
245 | rm submodule/.gitmodules && | |
246 | test-tool submodule-nested-repo-config \ | |
247 | submodule submodule.nested_submodule.url >actual 2>warning && | |
248 | test_i18ngrep "nested submodules without %s in the working tree are not supported yet" warning && | |
249 | test_cmp expect actual | |
250 | ) | |
251 | ' | |
252 | ||
959b5455 | 253 | test_done |