t5526: stop asserting on stderr literally

In the previous commit message, we noted that not all of the "git fetch" stderr is relevant to the tests. Most of the test setup lines are dedicated to these details of the stderr: 1. which repos (super/sub/deep) are involved in the fetch 2. the head of the remote-tracking branch before the fetch (i.e. $head1) 3. the head of the remote-tracking branch after the fetch (i.e. $head2) 1. and 3. are relevant because they tell us that the expected commit is fetched by the expected repo, but 2. is completely irrelevant. Stop asserting on $head1 by replacing it with a dummy value in the actual and expected output. Do this by introducing test helpers (write_expected_*()) that make it easier to construct the expected output, and use sed to munge the actual output. Signed-off-by: Glen Choo <chooglen@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Glen Choo committed Mar 7, 2022 at 16:14 UTC 6e94bd64f334b91fab0f06b44ad00fc34a068a8c
1 file changed +56 -61
t/t5526-fetch-submodules.sh
+56 -61
@@ -10,6 +10,32 @@ export GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB
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
@@ -17,27 +43,21 @@ pwd=$(pwd)
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
@@ -62,7 +82,8 @@ verify_fetch_result () {
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 '
@@ -274,12 +295,10 @@ test_expect_success "Recursion doesn't happen when no new commits are fetched in
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 &&
@@ -291,13 +310,11 @@ test_expect_success "Recursion stops when no new submodule commits are fetched"
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 (
@@ -318,12 +335,10 @@ test_expect_success "Recursion picks up config in submodule" '
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 &&
@@ -345,20 +360,15 @@ test_expect_success "Recursion picks up all submodules when necessary" '
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
@@ -376,13 +386,10 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne
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 &&
@@ -395,12 +402,10 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne
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 &&
@@ -421,13 +426,11 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
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 (
@@ -445,12 +448,10 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
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 &&
@@ -473,12 +474,10 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
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 &&
@@ -499,12 +498,10 @@ test_expect_success "don't fetch submodule when newly recorded commits are alrea
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 &&
@@ -526,13 +523,11 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
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 &&