10
11
pwd=$(pwd)
12
13
+write_expected_sub () {
14
+ NEW_HEAD=$1 &&
15
+ cat >"$pwd/expect.err.sub" <<-EOF
16
+ Fetching submodule submodule
17
+ From $pwd/submodule
18
+ OLD_HEAD..$NEW_HEAD sub -> origin/sub
19
+ EOF
20
+}
21
+
22
+write_expected_deep () {
23
+ NEW_HEAD=$1 &&
24
+ cat >"$pwd/expect.err.deep" <<-EOF
25
+ Fetching submodule submodule/subdir/deepsubmodule
26
+ From $pwd/deepsubmodule
27
+ OLD_HEAD..$NEW_HEAD deep -> origin/deep
28
+ EOF
29
+}
30
+
31
+write_expected_super () {
32
+ NEW_HEAD=$1 &&
33
+ cat >"$pwd/expect.err.super" <<-EOF
34
+ From $pwd/.
35
+ OLD_HEAD..$NEW_HEAD super -> origin/super
36
+ EOF
37
+}
38
+
39
# For each submodule in the test setup, this creates a commit and writes
40
# a file that contains the expected err if that new commit were fetched.
41
# These output files get concatenated in the right order by
43
add_upstream_commit() {
44
(
45
cd submodule &&
20
- head1=$(git rev-parse --short HEAD) &&
46
echo new >> subfile &&
47
test_tick &&
48
git add subfile &&
49
git commit -m new subfile &&
25
- head2=$(git rev-parse --short HEAD) &&
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
50
+ new_head=$(git rev-parse --short HEAD) &&
51
+ write_expected_sub $new_head
52
) &&
53
(
54
cd deepsubmodule &&
32
- head1=$(git rev-parse --short HEAD) &&
55
echo new >> deepsubfile &&
56
test_tick &&
57
git add deepsubfile &&
58
git commit -m new deepsubfile &&
37
- head2=$(git rev-parse --short HEAD) &&
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
59
+ new_head=$(git rev-parse --short HEAD) &&
60
+ write_expected_deep $new_head
61
)
62
}
63
82
then
83
cat expect.err.deep >>expect.err.combined
84
fi &&
65
- test_cmp expect.err.combined $ACTUAL_ERR
85
+ sed -e 's/[0-9a-f][0-9a-f]*\.\./OLD_HEAD\.\./' "$ACTUAL_ERR" >actual.err.cmp &&
86
+ test_cmp expect.err.combined actual.err.cmp
87
}
88
89
test_expect_success setup '
295
'
296
297
test_expect_success "Recursion stops when no new submodule commits are fetched" '
277
- head1=$(git rev-parse --short HEAD) &&
298
git add submodule &&
299
git commit -m "new submodule" &&
280
- head2=$(git rev-parse --short HEAD) &&
281
- echo "From $pwd/." > expect.err.super &&
282
- echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
300
+ new_head=$(git rev-parse --short HEAD) &&
301
+ write_expected_super $new_head &&
302
rm expect.err.deep &&
303
(
304
cd downstream &&
310
311
test_expect_success "Recursion doesn't happen when new superproject commits don't change any submodules" '
312
add_upstream_commit &&
294
- head1=$(git rev-parse --short HEAD) &&
313
echo a > file &&
314
git add file &&
315
git commit -m "new file" &&
298
- head2=$(git rev-parse --short HEAD) &&
299
- echo "From $pwd/." > expect.err.super &&
300
- echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
316
+ new_head=$(git rev-parse --short HEAD) &&
317
+ write_expected_super $new_head &&
318
rm expect.err.sub &&
319
rm expect.err.deep &&
320
(
335
)
336
) &&
337
add_upstream_commit &&
321
- head1=$(git rev-parse --short HEAD) &&
338
git add submodule &&
339
git commit -m "new submodule" &&
324
- head2=$(git rev-parse --short HEAD) &&
325
- echo "From $pwd/." > expect.err.super &&
326
- echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
340
+ new_head=$(git rev-parse --short HEAD) &&
341
+ write_expected_super $new_head &&
342
(
343
cd downstream &&
344
git fetch >../actual.out 2>../actual.err &&
360
git fetch &&
361
git checkout -q FETCH_HEAD
362
) &&
348
- head1=$(git rev-parse --short HEAD^) &&
363
git add subdir/deepsubmodule &&
364
git commit -m "new deepsubmodule" &&
351
- head2=$(git rev-parse --short HEAD) &&
352
- echo "Fetching submodule submodule" > ../expect.err.sub &&
353
- echo "From $pwd/submodule" >> ../expect.err.sub &&
354
- echo " $head1..$head2 sub -> origin/sub" >> ../expect.err.sub
365
+ new_head=$(git rev-parse --short HEAD) &&
366
+ write_expected_sub $new_head
367
) &&
356
- head1=$(git rev-parse --short HEAD) &&
368
git add submodule &&
369
git commit -m "new submodule" &&
359
- head2=$(git rev-parse --short HEAD) &&
360
- echo "From $pwd/." > expect.err.super &&
361
- echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
370
+ new_head=$(git rev-parse --short HEAD) &&
371
+ write_expected_super $new_head &&
372
(
373
cd downstream &&
374
git fetch >../actual.out 2>../actual.err
386
git fetch &&
387
git checkout -q FETCH_HEAD
388
) &&
379
- head1=$(git rev-parse --short HEAD^) &&
389
git add subdir/deepsubmodule &&
390
git commit -m "new deepsubmodule" &&
382
- head2=$(git rev-parse --short HEAD) &&
383
- echo Fetching submodule submodule > ../expect.err.sub &&
384
- echo "From $pwd/submodule" >> ../expect.err.sub &&
385
- echo " $head1..$head2 sub -> origin/sub" >> ../expect.err.sub
391
+ new_head=$(git rev-parse --short HEAD) &&
392
+ write_expected_sub $new_head
393
) &&
394
(
395
cd downstream &&
402
'
403
404
test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necessary (and ignores config)" '
398
- head1=$(git rev-parse --short HEAD) &&
405
git add submodule &&
406
git commit -m "new submodule" &&
401
- head2=$(git rev-parse --short HEAD) &&
402
- echo "From $pwd/." > expect.err.super &&
403
- echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
407
+ new_head=$(git rev-parse --short HEAD) &&
408
+ write_expected_super $new_head &&
409
(
410
cd downstream &&
411
git config fetch.recurseSubmodules false &&
426
427
test_expect_success "'--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)" '
428
add_upstream_commit &&
424
- head1=$(git rev-parse --short HEAD) &&
429
echo a >> file &&
430
git add file &&
431
git commit -m "new file" &&
428
- head2=$(git rev-parse --short HEAD) &&
429
- echo "From $pwd/." > expect.err.super &&
430
- echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
432
+ new_head=$(git rev-parse --short HEAD) &&
433
+ write_expected_super $new_head &&
434
rm expect.err.sub &&
435
rm expect.err.deep &&
436
(
448
) &&
449
add_upstream_commit &&
450
git config --global fetch.recurseSubmodules false &&
448
- head1=$(git rev-parse --short HEAD) &&
451
git add submodule &&
452
git commit -m "new submodule" &&
451
- head2=$(git rev-parse --short HEAD) &&
452
- echo "From $pwd/." > expect.err.super &&
453
- echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
453
+ new_head=$(git rev-parse --short HEAD) &&
454
+ write_expected_super $new_head &&
455
rm expect.err.deep &&
456
(
457
cd downstream &&
474
) &&
475
add_upstream_commit &&
476
git config fetch.recurseSubmodules false &&
476
- head1=$(git rev-parse --short HEAD) &&
477
git add submodule &&
478
git commit -m "new submodule" &&
479
- head2=$(git rev-parse --short HEAD) &&
480
- echo "From $pwd/." > expect.err.super &&
481
- echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
479
+ new_head=$(git rev-parse --short HEAD) &&
480
+ write_expected_super $new_head &&
481
rm expect.err.deep &&
482
(
483
cd downstream &&
498
cd submodule &&
499
git checkout -q HEAD^^
500
) &&
502
- head1=$(git rev-parse --short HEAD) &&
501
git add submodule &&
502
git commit -m "submodule rewound" &&
505
- head2=$(git rev-parse --short HEAD) &&
506
- echo "From $pwd/." > expect.err.super &&
507
- echo " $head1..$head2 super -> origin/super" >> expect.err.super &&
503
+ new_head=$(git rev-parse --short HEAD) &&
504
+ write_expected_super $new_head &&
505
rm expect.err.sub &&
506
# This file does not exist, but rm -f for readability
507
rm -f expect.err.deep &&
523
git fetch --recurse-submodules
524
) &&
525
add_upstream_commit &&
529
- head1=$(git rev-parse --short HEAD) &&
526
git add submodule &&
527
git rm .gitmodules &&
528
git commit -m "new submodule without .gitmodules" &&
533
- head2=$(git rev-parse --short HEAD) &&
534
- echo "From $pwd/." >expect.err.super &&
535
- echo " $head1..$head2 super -> origin/super" >>expect.err.super &&
529
+ new_head=$(git rev-parse --short HEAD) &&
530
+ write_expected_super $new_head &&
531
rm expect.err.deep &&
532
(
533
cd downstream &&