@@ -10,6 +10,10 @@ export GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB
1010
1111pwd=$( pwd)
1212
13+ # For each submodule in the test setup, this creates a commit and writes
14+ # a file that contains the expected err if that new commit were fetched.
15+ # These output files get concatenated in the right order by
16+ # verify_fetch_result().
1317add_upstream_commit () {
1418 (
1519 cd submodule &&
@@ -19,9 +23,9 @@ add_upstream_commit() {
1923 git add subfile &&
2024 git commit -m new subfile &&
2125 head2=$( git rev-parse --short HEAD) &&
22- echo " Fetching submodule submodule" > ../expect.err &&
23- echo " From $pwd /submodule" >> ../expect.err &&
24- echo " $head1 ..$head2 sub -> origin/sub" >> ../expect.err
26+ echo " Fetching submodule submodule" > ../expect.err.sub &&
27+ echo " From $pwd /submodule" >> ../expect.err.sub &&
28+ echo " $head1 ..$head2 sub -> origin/sub" >> ../expect.err.sub
2529 ) &&
2630 (
2731 cd deepsubmodule &&
@@ -31,12 +35,36 @@ add_upstream_commit() {
3135 git add deepsubfile &&
3236 git commit -m new deepsubfile &&
3337 head2=$( git rev-parse --short HEAD) &&
34- echo " Fetching submodule submodule/subdir/deepsubmodule" >> ../expect.err
35- echo " From $pwd /deepsubmodule" >> ../expect.err &&
36- echo " $head1 ..$head2 deep -> origin/deep" >> ../expect.err
38+ echo " Fetching submodule submodule/subdir/deepsubmodule" > ../expect.err.deep
39+ echo " From $pwd /deepsubmodule" >> ../expect.err.deep &&
40+ echo " $head1 ..$head2 deep -> origin/deep" >> ../expect.err.deep
3741 )
3842}
3943
44+ # Verifies that the expected repositories were fetched. This is done by
45+ # concatenating the files expect.err.[super|sub|deep] in the correct
46+ # order and comparing it to the actual stderr.
47+ #
48+ # If a repo should not be fetched in the test, its corresponding
49+ # expect.err file should be rm-ed.
50+ verify_fetch_result () {
51+ ACTUAL_ERR=$1 &&
52+ rm -f expect.err.combined &&
53+ if test -f expect.err.super
54+ then
55+ cat expect.err.super >> expect.err.combined
56+ fi &&
57+ if test -f expect.err.sub
58+ then
59+ cat expect.err.sub >> expect.err.combined
60+ fi &&
61+ if test -f expect.err.deep
62+ then
63+ cat expect.err.deep >> expect.err.combined
64+ fi &&
65+ test_cmp expect.err.combined $ACTUAL_ERR
66+ }
67+
4068test_expect_success setup '
4169 mkdir deepsubmodule &&
4270 (
@@ -74,7 +102,7 @@ test_expect_success "fetch --recurse-submodules recurses into submodules" '
74102 git fetch --recurse-submodules >../actual.out 2>../actual.err
75103 ) &&
76104 test_must_be_empty actual.out &&
77- test_cmp expect.err actual.err
105+ verify_fetch_result actual.err
78106'
79107
80108test_expect_success " submodule.recurse option triggers recursive fetch" '
@@ -84,7 +112,7 @@ test_expect_success "submodule.recurse option triggers recursive fetch" '
84112 git -c submodule.recurse fetch >../actual.out 2>../actual.err
85113 ) &&
86114 test_must_be_empty actual.out &&
87- test_cmp expect.err actual.err
115+ verify_fetch_result actual.err
88116'
89117
90118test_expect_success " fetch --recurse-submodules -j2 has the same output behaviour" '
@@ -94,7 +122,7 @@ test_expect_success "fetch --recurse-submodules -j2 has the same output behaviou
94122 GIT_TRACE="$TRASH_DIRECTORY/trace.out" git fetch --recurse-submodules -j2 2>../actual.err
95123 ) &&
96124 test_must_be_empty actual.out &&
97- test_cmp expect.err actual.err &&
125+ verify_fetch_result actual.err &&
98126 grep "2 tasks" trace.out
99127'
100128
@@ -124,7 +152,7 @@ test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses i
124152 git fetch >../actual.out 2>../actual.err
125153 ) &&
126154 test_must_be_empty actual.out &&
127- test_cmp expect.err actual.err
155+ verify_fetch_result actual.err
128156'
129157
130158test_expect_success " --no-recurse-submodules overrides .gitmodules config" '
@@ -155,7 +183,7 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
155183 git config --unset submodule.submodule.fetchRecurseSubmodules
156184 ) &&
157185 test_must_be_empty actual.out &&
158- test_cmp expect.err actual.err
186+ verify_fetch_result actual.err
159187'
160188
161189test_expect_success " --quiet propagates to submodules" '
@@ -183,7 +211,7 @@ test_expect_success "--dry-run propagates to submodules" '
183211 git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
184212 ) &&
185213 test_must_be_empty actual.out &&
186- test_cmp expect.err actual.err
214+ verify_fetch_result actual.err
187215'
188216
189217test_expect_success " Without --dry-run propagates to submodules" '
@@ -192,7 +220,7 @@ test_expect_success "Without --dry-run propagates to submodules" '
192220 git fetch --recurse-submodules >../actual.out 2>../actual.err
193221 ) &&
194222 test_must_be_empty actual.out &&
195- test_cmp expect.err actual.err
223+ verify_fetch_result actual.err
196224'
197225
198226test_expect_success " recurseSubmodules=true propagates into submodules" '
@@ -203,7 +231,7 @@ test_expect_success "recurseSubmodules=true propagates into submodules" '
203231 git fetch >../actual.out 2>../actual.err
204232 ) &&
205233 test_must_be_empty actual.out &&
206- test_cmp expect.err actual.err
234+ verify_fetch_result actual.err
207235'
208236
209237test_expect_success " --recurse-submodules overrides config in submodule" '
@@ -217,7 +245,7 @@ test_expect_success "--recurse-submodules overrides config in submodule" '
217245 git fetch --recurse-submodules >../actual.out 2>../actual.err
218246 ) &&
219247 test_must_be_empty actual.out &&
220- test_cmp expect.err actual.err
248+ verify_fetch_result actual.err
221249'
222250
223251test_expect_success " --no-recurse-submodules overrides config setting" '
@@ -250,14 +278,14 @@ test_expect_success "Recursion stops when no new submodule commits are fetched"
250278 git add submodule &&
251279 git commit -m "new submodule" &&
252280 head2=$(git rev-parse --short HEAD) &&
253- echo "From $pwd/." > expect.err.sub &&
254- echo " $head1..$head2 super -> origin/super" >>expect.err.sub &&
255- head -3 expect.err >> expect.err.sub &&
281+ echo "From $pwd/." > expect.err.super &&
282+ echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
283+ rm expect.err.deep &&
256284 (
257285 cd downstream &&
258286 git fetch >../actual.out 2>../actual.err
259287 ) &&
260- test_cmp expect.err.sub actual.err &&
288+ verify_fetch_result actual.err &&
261289 test_must_be_empty actual.out
262290'
263291
@@ -268,14 +296,16 @@ test_expect_success "Recursion doesn't happen when new superproject commits don'
268296 git add file &&
269297 git commit -m "new file" &&
270298 head2=$(git rev-parse --short HEAD) &&
271- echo "From $pwd/." > expect.err.file &&
272- echo " $head1..$head2 super -> origin/super" >> expect.err.file &&
299+ echo "From $pwd/." > expect.err.super &&
300+ echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
301+ rm expect.err.sub &&
302+ rm expect.err.deep &&
273303 (
274304 cd downstream &&
275305 git fetch >../actual.out 2>../actual.err
276306 ) &&
277307 test_must_be_empty actual.out &&
278- test_cmp expect.err.file actual.err
308+ verify_fetch_result actual.err
279309'
280310
281311test_expect_success " Recursion picks up config in submodule" '
@@ -292,9 +322,8 @@ test_expect_success "Recursion picks up config in submodule" '
292322 git add submodule &&
293323 git commit -m "new submodule" &&
294324 head2=$(git rev-parse --short HEAD) &&
295- echo "From $pwd/." > expect.err.sub &&
296- echo " $head1..$head2 super -> origin/super" >> expect.err.sub &&
297- cat expect.err >> expect.err.sub &&
325+ echo "From $pwd/." > expect.err.super &&
326+ echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
298327 (
299328 cd downstream &&
300329 git fetch >../actual.out 2>../actual.err &&
@@ -303,7 +332,7 @@ test_expect_success "Recursion picks up config in submodule" '
303332 git config --unset fetch.recurseSubmodules
304333 )
305334 ) &&
306- test_cmp expect.err.sub actual.err &&
335+ verify_fetch_result actual.err &&
307336 test_must_be_empty actual.out
308337'
309338
@@ -328,15 +357,13 @@ test_expect_success "Recursion picks up all submodules when necessary" '
328357 git add submodule &&
329358 git commit -m "new submodule" &&
330359 head2=$(git rev-parse --short HEAD) &&
331- echo "From $pwd/." > expect.err.2 &&
332- echo " $head1..$head2 super -> origin/super" >> expect.err.2 &&
333- cat expect.err.sub >> expect.err.2 &&
334- tail -3 expect.err >> expect.err.2 &&
360+ echo "From $pwd/." > expect.err.super &&
361+ echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
335362 (
336363 cd downstream &&
337364 git fetch >../actual.out 2>../actual.err
338365 ) &&
339- test_cmp expect.err.2 actual.err &&
366+ verify_fetch_result actual.err &&
340367 test_must_be_empty actual.out
341368'
342369
@@ -372,11 +399,8 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
372399 git add submodule &&
373400 git commit -m "new submodule" &&
374401 head2=$(git rev-parse --short HEAD) &&
375- tail -3 expect.err > expect.err.deepsub &&
376- echo "From $pwd/." > expect.err &&
377- echo " $head1..$head2 super -> origin/super" >>expect.err &&
378- cat expect.err.sub >> expect.err &&
379- cat expect.err.deepsub >> expect.err &&
402+ echo "From $pwd/." > expect.err.super &&
403+ echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
380404 (
381405 cd downstream &&
382406 git config fetch.recurseSubmodules false &&
@@ -392,7 +416,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
392416 )
393417 ) &&
394418 test_must_be_empty actual.out &&
395- test_cmp expect.err actual.err
419+ verify_fetch_result actual.err
396420'
397421
398422test_expect_success " '--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)" '
@@ -402,14 +426,16 @@ test_expect_success "'--recurse-submodules=on-demand' stops when no new submodul
402426 git add file &&
403427 git commit -m "new file" &&
404428 head2=$(git rev-parse --short HEAD) &&
405- echo "From $pwd/." > expect.err.file &&
406- echo " $head1..$head2 super -> origin/super" >> expect.err.file &&
429+ echo "From $pwd/." > expect.err.super &&
430+ echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
431+ rm expect.err.sub &&
432+ rm expect.err.deep &&
407433 (
408434 cd downstream &&
409435 git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
410436 ) &&
411437 test_must_be_empty actual.out &&
412- test_cmp expect.err.file actual.err
438+ verify_fetch_result actual.err
413439'
414440
415441test_expect_success " 'fetch.recurseSubmodules=on-demand' overrides global config" '
@@ -423,9 +449,9 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
423449 git add submodule &&
424450 git commit -m "new submodule" &&
425451 head2=$(git rev-parse --short HEAD) &&
426- echo "From $pwd/." > expect.err.2 &&
427- echo " $head1..$head2 super -> origin/super" >>expect.err.2 &&
428- head -3 expect.err >> expect.err.2 &&
452+ echo "From $pwd/." > expect.err.super &&
453+ echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
454+ rm expect.err.deep &&
429455 (
430456 cd downstream &&
431457 git config fetch.recurseSubmodules on-demand &&
@@ -437,7 +463,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
437463 git config --unset fetch.recurseSubmodules
438464 ) &&
439465 test_must_be_empty actual.out &&
440- test_cmp expect.err.2 actual.err
466+ verify_fetch_result actual.err
441467'
442468
443469test_expect_success " 'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules" '
@@ -451,9 +477,9 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
451477 git add submodule &&
452478 git commit -m "new submodule" &&
453479 head2=$(git rev-parse --short HEAD) &&
454- echo "From $pwd/." > expect.err.2 &&
455- echo " $head1..$head2 super -> origin/super" >>expect.err.2 &&
456- head -3 expect.err >> expect.err.2 &&
480+ echo "From $pwd/." > expect.err.super &&
481+ echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
482+ rm expect.err.deep &&
457483 (
458484 cd downstream &&
459485 git config submodule.submodule.fetchRecurseSubmodules on-demand &&
@@ -465,7 +491,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
465491 git config --unset submodule.submodule.fetchRecurseSubmodules
466492 ) &&
467493 test_must_be_empty actual.out &&
468- test_cmp expect.err.2 actual.err
494+ verify_fetch_result actual.err
469495'
470496
471497test_expect_success " don't fetch submodule when newly recorded commits are already present" '
@@ -477,14 +503,17 @@ test_expect_success "don't fetch submodule when newly recorded commits are alrea
477503 git add submodule &&
478504 git commit -m "submodule rewound" &&
479505 head2=$(git rev-parse --short HEAD) &&
480- echo "From $pwd/." > expect.err &&
481- echo " $head1..$head2 super -> origin/super" >> expect.err &&
506+ echo "From $pwd/." > expect.err.super &&
507+ echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
508+ rm expect.err.sub &&
509+ # This file does not exist, but rm -f for readability
510+ rm -f expect.err.deep &&
482511 (
483512 cd downstream &&
484513 git fetch >../actual.out 2>../actual.err
485514 ) &&
486515 test_must_be_empty actual.out &&
487- test_cmp expect.err actual.err &&
516+ verify_fetch_result actual.err &&
488517 (
489518 cd submodule &&
490519 git checkout -q sub
@@ -502,9 +531,9 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
502531 git rm .gitmodules &&
503532 git commit -m "new submodule without .gitmodules" &&
504533 head2=$(git rev-parse --short HEAD) &&
505- echo "From $pwd/." >expect.err.2 &&
506- echo " $head1..$head2 super -> origin/super" >>expect.err.2 &&
507- head -3 expect.err >>expect.err.2 &&
534+ echo "From $pwd/." >expect.err.super &&
535+ echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
536+ rm expect.err.deep &&
508537 (
509538 cd downstream &&
510539 rm .gitmodules &&
@@ -520,7 +549,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
520549 git reset --hard
521550 ) &&
522551 test_must_be_empty actual.out &&
523- test_cmp expect.err.2 actual.err &&
552+ verify_fetch_result actual.err &&
524553 git checkout HEAD^ -- .gitmodules &&
525554 git add .gitmodules &&
526555 git commit -m "new submodule restored .gitmodules"
0 commit comments