10
11
pwd=$(pwd)
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().
17
add_upstream_commit() {
18
(
19
cd submodule &&
23
git add subfile &&
24
git commit -m new subfile &&
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
29
) &&
30
(
31
cd deepsubmodule &&
35
git add deepsubfile &&
36
git commit -m new deepsubfile &&
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
41
)
42
}
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
+
68
test_expect_success setup '
69
mkdir deepsubmodule &&
70
(
102
git fetch --recurse-submodules >../actual.out 2>../actual.err
103
) &&
104
test_must_be_empty actual.out &&
77
- test_cmp expect.err actual.err
105
+ verify_fetch_result actual.err
106
'
107
108
test_expect_success "submodule.recurse option triggers recursive fetch" '
112
git -c submodule.recurse fetch >../actual.out 2>../actual.err
113
) &&
114
test_must_be_empty actual.out &&
87
- test_cmp expect.err actual.err
115
+ verify_fetch_result actual.err
116
'
117
118
test_expect_success "fetch --recurse-submodules -j2 has the same output behaviour" '
122
GIT_TRACE="$TRASH_DIRECTORY/trace.out" git fetch --recurse-submodules -j2 2>../actual.err
123
) &&
124
test_must_be_empty actual.out &&
97
- test_cmp expect.err actual.err &&
125
+ verify_fetch_result actual.err &&
126
grep "2 tasks" trace.out
127
'
128
152
git fetch >../actual.out 2>../actual.err
153
) &&
154
test_must_be_empty actual.out &&
127
- test_cmp expect.err actual.err
155
+ verify_fetch_result actual.err
156
'
157
158
test_expect_success "--no-recurse-submodules overrides .gitmodules config" '
183
git config --unset submodule.submodule.fetchRecurseSubmodules
184
) &&
185
test_must_be_empty actual.out &&
158
- test_cmp expect.err actual.err
186
+ verify_fetch_result actual.err
187
'
188
189
test_expect_success "--quiet propagates to submodules" '
211
git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
212
) &&
213
test_must_be_empty actual.out &&
186
- test_cmp expect.err actual.err
214
+ verify_fetch_result actual.err
215
'
216
217
test_expect_success "Without --dry-run propagates to submodules" '
220
git fetch --recurse-submodules >../actual.out 2>../actual.err
221
) &&
222
test_must_be_empty actual.out &&
195
- test_cmp expect.err actual.err
223
+ verify_fetch_result actual.err
224
'
225
226
test_expect_success "recurseSubmodules=true propagates into submodules" '
231
git fetch >../actual.out 2>../actual.err
232
) &&
233
test_must_be_empty actual.out &&
206
- test_cmp expect.err actual.err
234
+ verify_fetch_result actual.err
235
'
236
237
test_expect_success "--recurse-submodules overrides config in submodule" '
245
git fetch --recurse-submodules >../actual.out 2>../actual.err
246
) &&
247
test_must_be_empty actual.out &&
220
- test_cmp expect.err actual.err
248
+ verify_fetch_result actual.err
249
'
250
251
test_expect_success "--no-recurse-submodules overrides config setting" '
278
git add submodule &&
279
git commit -m "new submodule" &&
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 &&
284
(
285
cd downstream &&
286
git fetch >../actual.out 2>../actual.err
287
) &&
260
- test_cmp expect.err.sub actual.err &&
288
+ verify_fetch_result actual.err &&
289
test_must_be_empty actual.out
290
'
291
296
git add file &&
297
git commit -m "new file" &&
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 &&
303
(
304
cd downstream &&
305
git fetch >../actual.out 2>../actual.err
306
) &&
307
test_must_be_empty actual.out &&
278
- test_cmp expect.err.file actual.err
308
+ verify_fetch_result actual.err
309
'
310
311
test_expect_success "Recursion picks up config in submodule" '
322
git add submodule &&
323
git commit -m "new submodule" &&
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 &&
327
(
328
cd downstream &&
329
git fetch >../actual.out 2>../actual.err &&
332
git config --unset fetch.recurseSubmodules
333
)
334
) &&
306
- test_cmp expect.err.sub actual.err &&
335
+ verify_fetch_result actual.err &&
336
test_must_be_empty actual.out
337
'
338
357
git add submodule &&
358
git commit -m "new submodule" &&
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 &&
362
(
363
cd downstream &&
364
git fetch >../actual.out 2>../actual.err
365
) &&
339
- test_cmp expect.err.2 actual.err &&
366
+ verify_fetch_result actual.err &&
367
test_must_be_empty actual.out
368
'
369
399
git add submodule &&
400
git commit -m "new submodule" &&
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 &&
404
(
405
cd downstream &&
406
git config fetch.recurseSubmodules false &&
416
)
417
) &&
418
test_must_be_empty actual.out &&
395
- test_cmp expect.err actual.err
419
+ verify_fetch_result actual.err
420
'
421
422
test_expect_success "'--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)" '
426
git add file &&
427
git commit -m "new file" &&
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 &&
433
(
434
cd downstream &&
435
git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
436
) &&
437
test_must_be_empty actual.out &&
412
- test_cmp expect.err.file actual.err
438
+ verify_fetch_result actual.err
439
'
440
441
test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config" '
449
git add submodule &&
450
git commit -m "new submodule" &&
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 &&
455
(
456
cd downstream &&
457
git config fetch.recurseSubmodules on-demand &&
463
git config --unset fetch.recurseSubmodules
464
) &&
465
test_must_be_empty actual.out &&
440
- test_cmp expect.err.2 actual.err
466
+ verify_fetch_result actual.err
467
'
468
469
test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules" '
477
git add submodule &&
478
git commit -m "new submodule" &&
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 &&
483
(
484
cd downstream &&
485
git config submodule.submodule.fetchRecurseSubmodules on-demand &&
491
git config --unset submodule.submodule.fetchRecurseSubmodules
492
) &&
493
test_must_be_empty actual.out &&
468
- test_cmp expect.err.2 actual.err
494
+ verify_fetch_result actual.err
495
'
496
497
test_expect_success "don't fetch submodule when newly recorded commits are already present" '
503
git add submodule &&
504
git commit -m "submodule rewound" &&
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 &&
511
(
512
cd downstream &&
513
git fetch >../actual.out 2>../actual.err
514
) &&
515
test_must_be_empty actual.out &&
487
- test_cmp expect.err actual.err &&
516
+ verify_fetch_result actual.err &&
517
(
518
cd submodule &&
519
git checkout -q sub
531
git rm .gitmodules &&
532
git commit -m "new submodule without .gitmodules" &&
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 &&
537
(
538
cd downstream &&
539
rm .gitmodules &&
549
git reset --hard
550
) &&
551
test_must_be_empty actual.out &&
523
- test_cmp expect.err.2 actual.err &&
552
+ verify_fetch_result actual.err &&
553
git checkout HEAD^ -- .gitmodules &&
554
git add .gitmodules &&
555
git commit -m "new submodule restored .gitmodules"