Skip to content

Commit f3117df

Browse files
chooglengitster
authored andcommitted
t5526: introduce test helper to assert on fetches
Tests in t/t5526-fetch-submodules.sh are unnecessarily noisy: * The tests have extra logic in order to reproduce the expected stderr literally, but not all of these details (e.g. the head of the remote-tracking branch before the fetch) are relevant to the test. * The expect.err file is constructed by the add_upstream_commit() helper as input into test_cmp, but most tests fetch a different combination of repos from expect.err. This results in noisy tests that modify parts of that expect.err to generate the expected output. To address both of these issues, introduce a verify_fetch_result() helper to t/t5526-fetch-submodules.sh that asserts on the output of "git fetch --recurse-submodules" and handles the ordering of expect.err. As a result, the tests no longer construct expect.err manually. Tests still consider the old head of the remote-tracking branch ("$head1"), but that will be fixed in a later commit. Signed-off-by: Glen Choo <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent dab1b79 commit f3117df

File tree

1 file changed

+84
-55
lines changed

1 file changed

+84
-55
lines changed

t/t5526-fetch-submodules.sh

Lines changed: 84 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ export GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB
1010

1111
pwd=$(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().
1317
add_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+
4068
test_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

80108
test_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

90118
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
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

130158
test_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

161189
test_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

189217
test_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

198226
test_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

209237
test_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

223251
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"
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

281311
test_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

398422
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
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

415441
test_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

443469
test_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

471497
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
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

Comments
 (0)