@@ -10,6 +10,10 @@ export GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB
10
10
11
11
pwd=$( pwd)
12
12
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().
13
17
add_upstream_commit () {
14
18
(
15
19
cd submodule &&
@@ -19,9 +23,9 @@ add_upstream_commit() {
19
23
git add subfile &&
20
24
git commit -m new subfile &&
21
25
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
25
29
) &&
26
30
(
27
31
cd deepsubmodule &&
@@ -31,12 +35,36 @@ add_upstream_commit() {
31
35
git add deepsubfile &&
32
36
git commit -m new deepsubfile &&
33
37
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
37
41
)
38
42
}
39
43
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
+
40
68
test_expect_success setup '
41
69
mkdir deepsubmodule &&
42
70
(
@@ -74,7 +102,7 @@ test_expect_success "fetch --recurse-submodules recurses into submodules" '
74
102
git fetch --recurse-submodules >../actual.out 2>../actual.err
75
103
) &&
76
104
test_must_be_empty actual.out &&
77
- test_cmp expect.err actual.err
105
+ verify_fetch_result actual.err
78
106
'
79
107
80
108
test_expect_success " submodule.recurse option triggers recursive fetch" '
@@ -84,7 +112,7 @@ test_expect_success "submodule.recurse option triggers recursive fetch" '
84
112
git -c submodule.recurse fetch >../actual.out 2>../actual.err
85
113
) &&
86
114
test_must_be_empty actual.out &&
87
- test_cmp expect.err actual.err
115
+ verify_fetch_result actual.err
88
116
'
89
117
90
118
test_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
94
122
GIT_TRACE="$TRASH_DIRECTORY/trace.out" git fetch --recurse-submodules -j2 2>../actual.err
95
123
) &&
96
124
test_must_be_empty actual.out &&
97
- test_cmp expect.err actual.err &&
125
+ verify_fetch_result actual.err &&
98
126
grep "2 tasks" trace.out
99
127
'
100
128
@@ -124,7 +152,7 @@ test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses i
124
152
git fetch >../actual.out 2>../actual.err
125
153
) &&
126
154
test_must_be_empty actual.out &&
127
- test_cmp expect.err actual.err
155
+ verify_fetch_result actual.err
128
156
'
129
157
130
158
test_expect_success " --no-recurse-submodules overrides .gitmodules config" '
@@ -155,7 +183,7 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
155
183
git config --unset submodule.submodule.fetchRecurseSubmodules
156
184
) &&
157
185
test_must_be_empty actual.out &&
158
- test_cmp expect.err actual.err
186
+ verify_fetch_result actual.err
159
187
'
160
188
161
189
test_expect_success " --quiet propagates to submodules" '
@@ -183,7 +211,7 @@ test_expect_success "--dry-run propagates to submodules" '
183
211
git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
184
212
) &&
185
213
test_must_be_empty actual.out &&
186
- test_cmp expect.err actual.err
214
+ verify_fetch_result actual.err
187
215
'
188
216
189
217
test_expect_success " Without --dry-run propagates to submodules" '
@@ -192,7 +220,7 @@ test_expect_success "Without --dry-run propagates to submodules" '
192
220
git fetch --recurse-submodules >../actual.out 2>../actual.err
193
221
) &&
194
222
test_must_be_empty actual.out &&
195
- test_cmp expect.err actual.err
223
+ verify_fetch_result actual.err
196
224
'
197
225
198
226
test_expect_success " recurseSubmodules=true propagates into submodules" '
@@ -203,7 +231,7 @@ test_expect_success "recurseSubmodules=true propagates into submodules" '
203
231
git fetch >../actual.out 2>../actual.err
204
232
) &&
205
233
test_must_be_empty actual.out &&
206
- test_cmp expect.err actual.err
234
+ verify_fetch_result actual.err
207
235
'
208
236
209
237
test_expect_success " --recurse-submodules overrides config in submodule" '
@@ -217,7 +245,7 @@ test_expect_success "--recurse-submodules overrides config in submodule" '
217
245
git fetch --recurse-submodules >../actual.out 2>../actual.err
218
246
) &&
219
247
test_must_be_empty actual.out &&
220
- test_cmp expect.err actual.err
248
+ verify_fetch_result actual.err
221
249
'
222
250
223
251
test_expect_success " --no-recurse-submodules overrides config setting" '
@@ -250,14 +278,14 @@ test_expect_success "Recursion stops when no new submodule commits are fetched"
250
278
git add submodule &&
251
279
git commit -m "new submodule" &&
252
280
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 &&
256
284
(
257
285
cd downstream &&
258
286
git fetch >../actual.out 2>../actual.err
259
287
) &&
260
- test_cmp expect.err.sub actual.err &&
288
+ verify_fetch_result actual.err &&
261
289
test_must_be_empty actual.out
262
290
'
263
291
@@ -268,14 +296,16 @@ test_expect_success "Recursion doesn't happen when new superproject commits don'
268
296
git add file &&
269
297
git commit -m "new file" &&
270
298
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 &&
273
303
(
274
304
cd downstream &&
275
305
git fetch >../actual.out 2>../actual.err
276
306
) &&
277
307
test_must_be_empty actual.out &&
278
- test_cmp expect.err.file actual.err
308
+ verify_fetch_result actual.err
279
309
'
280
310
281
311
test_expect_success " Recursion picks up config in submodule" '
@@ -292,9 +322,8 @@ test_expect_success "Recursion picks up config in submodule" '
292
322
git add submodule &&
293
323
git commit -m "new submodule" &&
294
324
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 &&
298
327
(
299
328
cd downstream &&
300
329
git fetch >../actual.out 2>../actual.err &&
@@ -303,7 +332,7 @@ test_expect_success "Recursion picks up config in submodule" '
303
332
git config --unset fetch.recurseSubmodules
304
333
)
305
334
) &&
306
- test_cmp expect.err.sub actual.err &&
335
+ verify_fetch_result actual.err &&
307
336
test_must_be_empty actual.out
308
337
'
309
338
@@ -328,15 +357,13 @@ test_expect_success "Recursion picks up all submodules when necessary" '
328
357
git add submodule &&
329
358
git commit -m "new submodule" &&
330
359
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 &&
335
362
(
336
363
cd downstream &&
337
364
git fetch >../actual.out 2>../actual.err
338
365
) &&
339
- test_cmp expect.err.2 actual.err &&
366
+ verify_fetch_result actual.err &&
340
367
test_must_be_empty actual.out
341
368
'
342
369
@@ -372,11 +399,8 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
372
399
git add submodule &&
373
400
git commit -m "new submodule" &&
374
401
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 &&
380
404
(
381
405
cd downstream &&
382
406
git config fetch.recurseSubmodules false &&
@@ -392,7 +416,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
392
416
)
393
417
) &&
394
418
test_must_be_empty actual.out &&
395
- test_cmp expect.err actual.err
419
+ verify_fetch_result actual.err
396
420
'
397
421
398
422
test_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
402
426
git add file &&
403
427
git commit -m "new file" &&
404
428
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 &&
407
433
(
408
434
cd downstream &&
409
435
git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
410
436
) &&
411
437
test_must_be_empty actual.out &&
412
- test_cmp expect.err.file actual.err
438
+ verify_fetch_result actual.err
413
439
'
414
440
415
441
test_expect_success " 'fetch.recurseSubmodules=on-demand' overrides global config" '
@@ -423,9 +449,9 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
423
449
git add submodule &&
424
450
git commit -m "new submodule" &&
425
451
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 &&
429
455
(
430
456
cd downstream &&
431
457
git config fetch.recurseSubmodules on-demand &&
@@ -437,7 +463,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
437
463
git config --unset fetch.recurseSubmodules
438
464
) &&
439
465
test_must_be_empty actual.out &&
440
- test_cmp expect.err.2 actual.err
466
+ verify_fetch_result actual.err
441
467
'
442
468
443
469
test_expect_success " 'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules" '
@@ -451,9 +477,9 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
451
477
git add submodule &&
452
478
git commit -m "new submodule" &&
453
479
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 &&
457
483
(
458
484
cd downstream &&
459
485
git config submodule.submodule.fetchRecurseSubmodules on-demand &&
@@ -465,7 +491,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
465
491
git config --unset submodule.submodule.fetchRecurseSubmodules
466
492
) &&
467
493
test_must_be_empty actual.out &&
468
- test_cmp expect.err.2 actual.err
494
+ verify_fetch_result actual.err
469
495
'
470
496
471
497
test_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
477
503
git add submodule &&
478
504
git commit -m "submodule rewound" &&
479
505
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 &&
482
511
(
483
512
cd downstream &&
484
513
git fetch >../actual.out 2>../actual.err
485
514
) &&
486
515
test_must_be_empty actual.out &&
487
- test_cmp expect.err actual.err &&
516
+ verify_fetch_result actual.err &&
488
517
(
489
518
cd submodule &&
490
519
git checkout -q sub
@@ -502,9 +531,9 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
502
531
git rm .gitmodules &&
503
532
git commit -m "new submodule without .gitmodules" &&
504
533
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 &&
508
537
(
509
538
cd downstream &&
510
539
rm .gitmodules &&
@@ -520,7 +549,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
520
549
git reset --hard
521
550
) &&
522
551
test_must_be_empty actual.out &&
523
- test_cmp expect.err.2 actual.err &&
552
+ verify_fetch_result actual.err &&
524
553
git checkout HEAD^ -- .gitmodules &&
525
554
git add .gitmodules &&
526
555
git commit -m "new submodule restored .gitmodules"
0 commit comments