test that git status works with merge conflict in, .gitmodules

For example: Two users independently adding a submodule will result in a merge conflict in .gitmodules. Since configuration of the status and diff machinery depends on the file being parseable they currently fail to produce useable output in case .gitmodules is marked with a merge conflict. Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Heiko Voigt committed May 14, 2011 at 18:26 UTC 44ca0c8ed927c8e7525ceec412704ff9967ff6ac
1 file changed +88 -4
t/t7506-status-submodule.sh
+88 -4
@@ -4,17 +4,21 @@ test_description='git status for submodule'
4
5 . ./test-lib.sh
6
7 -test_expect_success 'setup' '
8 - test_create_repo sub &&
7 +test_create_repo_with_commit () {
8 + test_create_repo "$1" &&
9 (
10 - cd sub &&
10 + cd "$1" &&
11 : >bar &&
12 git add bar &&
13 git commit -m " Add bar" &&
14 : >foo &&
15 git add foo &&
16 git commit -m " Add foo"
17 - ) &&
17 + )
18 +}
19 +
20 +test_expect_success 'setup' '
21 + test_create_repo_with_commit sub &&
22 echo output > .gitignore &&
23 git add sub .gitignore &&
24 git commit -m "Add submodule sub"
@@ -187,4 +191,84 @@ test_expect_success C_LOCALE_OUTPUT 'status -a clean (empty submodule dir)' '
191 grep "nothing to commit" output
192 '
193
194 +cat >status_expect <<\EOF
195 +AA .gitmodules
196 +A sub1
197 +EOF
198 +
199 +test_expect_failure 'status with merge conflict in .gitmodules' '
200 + git clone . super &&
201 + test_create_repo_with_commit sub1 &&
202 + test_tick &&
203 + test_create_repo_with_commit sub2 &&
204 + (
205 + cd super &&
206 + prev=$(git rev-parse HEAD) &&
207 + git checkout -b add_sub1 &&
208 + git submodule add ../sub1 &&
209 + git commit -m "add sub1" &&
210 + git checkout -b add_sub2 $prev &&
211 + git submodule add ../sub2 &&
212 + git commit -m "add sub2" &&
213 + git checkout -b merge_conflict_gitmodules &&
214 + test_must_fail git merge add_sub1 &&
215 + git status -s >../status_actual 2>&1
216 + ) &&
217 + test_cmp status_actual status_expect
218 +'
219 +
220 +sha1_merge_sub1=$(cd sub1 && git rev-parse HEAD)
221 +sha1_merge_sub2=$(cd sub2 && git rev-parse HEAD)
222 +short_sha1_merge_sub1=$(cd sub1 && git rev-parse --short HEAD)
223 +short_sha1_merge_sub2=$(cd sub2 && git rev-parse --short HEAD)
224 +cat >diff_expect <<\EOF
225 +diff --cc .gitmodules
226 +index badaa4c,44f999a..0000000
227 +--- a/.gitmodules
228 ++++ b/.gitmodules
229 +@@@ -1,3 -1,3 +1,9 @@@
230 +++<<<<<<< HEAD
231 + +[submodule "sub2"]
232 + + path = sub2
233 + + url = ../sub2
234 +++=======
235 ++ [submodule "sub1"]
236 ++ path = sub1
237 ++ url = ../sub1
238 +++>>>>>>> add_sub1
239 +EOF
240 +
241 +cat >diff_submodule_expect <<\EOF
242 +diff --cc .gitmodules
243 +index badaa4c,44f999a..0000000
244 +--- a/.gitmodules
245 ++++ b/.gitmodules
246 +@@@ -1,3 -1,3 +1,9 @@@
247 +++<<<<<<< HEAD
248 + +[submodule "sub2"]
249 + + path = sub2
250 + + url = ../sub2
251 +++=======
252 ++ [submodule "sub1"]
253 ++ path = sub1
254 ++ url = ../sub1
255 +++>>>>>>> add_sub1
256 +EOF
257 +
258 +test_expect_failure 'diff with merge conflict in .gitmodules' '
259 + (
260 + cd super &&
261 + git diff >../diff_actual 2>&1
262 + ) &&
263 + test_cmp diff_actual diff_expect
264 +'
265 +
266 +test_expect_failure 'diff --submodule with merge conflict in .gitmodules' '
267 + (
268 + cd super &&
269 + git diff --submodule >../diff_submodule_actual 2>&1
270 + ) &&
271 + test_cmp diff_submodule_actual diff_submodule_expect
272 +'
273 +
274 test_done