t3030-merge-recursive: don't check the stderr of a subshell
authorSZEDER Gábor <szeder.dev@gmail.com>
Fri, 23 Feb 2018 23:39:44 +0000 (00:39 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 Feb 2018 20:57:51 +0000 (12:57 -0800)
The two test checking 'git mmerge-recursive' in an empty worktree in
't3030-merge-recursive.sh' fail when the test script is run with '-x'
tracing (and using a shell other than a Bash version supporting
BASH_XTRACEFD). The reason for those failures is that the tests check
the emptiness of a subshell's stderr, which includes the trace of
commands executed in that subshell as well, throwing off the emptiness
check.

Note that both subshells execute four git commands each, meaning that
checking the emptiness of the whole subshell implicitly ensures that
not only 'git merge-recursive' but none of the other three commands
outputs anything to their stderr. Note also that if one of those
commands were to output anything on its stderr, then the current
combined check would not tell us which one of those four commands the
unexpected output came from.

Save the stderr of those four commands only instead of the whole
subshell, so it remains free from tracing output, and save and check
them individually, so they will show us from which command the
unexpected output came from.

After this change t3030 passes with '-x', even when running with
/bin/sh.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3030-merge-recursive.sh
index cdc38fe5d1a0d171aa3cdf9ac8ee73dd2cd3b18d..3563e77b374c69a138bdfa3b274b75b6094c55a7 100755 (executable)
@@ -525,20 +525,22 @@ test_expect_success 'merge-recursive w/ empty work tree - ours has rename' '
                GIT_INDEX_FILE="$PWD/ours-has-rename-index" &&
                export GIT_INDEX_FILE &&
                mkdir "$GIT_WORK_TREE" &&
-               git read-tree -i -m $c7 &&
-               git update-index --ignore-missing --refresh &&
-               git merge-recursive $c0 -- $c7 $c3 &&
-               git ls-files -s >actual-files
-       ) 2>actual-err &&
-       >expected-err &&
+               git read-tree -i -m $c7 2>actual-err &&
+               test_must_be_empty actual-err &&
+               git update-index --ignore-missing --refresh 2>actual-err &&
+               test_must_be_empty actual-err &&
+               git merge-recursive $c0 -- $c7 $c3 2>actual-err &&
+               test_must_be_empty actual-err &&
+               git ls-files -s >actual-files 2>actual-err &&
+               test_must_be_empty actual-err
+       ) &&
        cat >expected-files <<-EOF &&
        100644 $o3 0    b/c
        100644 $o0 0    c
        100644 $o0 0    d/e
        100644 $o0 0    e
        EOF
-       test_cmp expected-files actual-files &&
-       test_cmp expected-err actual-err
+       test_cmp expected-files actual-files
 '
 
 test_expect_success 'merge-recursive w/ empty work tree - theirs has rename' '
@@ -548,20 +550,22 @@ test_expect_success 'merge-recursive w/ empty work tree - theirs has rename' '
                GIT_INDEX_FILE="$PWD/theirs-has-rename-index" &&
                export GIT_INDEX_FILE &&
                mkdir "$GIT_WORK_TREE" &&
-               git read-tree -i -m $c3 &&
-               git update-index --ignore-missing --refresh &&
-               git merge-recursive $c0 -- $c3 $c7 &&
-               git ls-files -s >actual-files
-       ) 2>actual-err &&
-       >expected-err &&
+               git read-tree -i -m $c3 2>actual-err &&
+               test_must_be_empty actual-err &&
+               git update-index --ignore-missing --refresh 2>actual-err &&
+               test_must_be_empty actual-err &&
+               git merge-recursive $c0 -- $c3 $c7 2>actual-err &&
+               test_must_be_empty actual-err &&
+               git ls-files -s >actual-files 2>actual-err &&
+               test_must_be_empty actual-err
+       ) &&
        cat >expected-files <<-EOF &&
        100644 $o3 0    b/c
        100644 $o0 0    c
        100644 $o0 0    d/e
        100644 $o0 0    e
        EOF
-       test_cmp expected-files actual-files &&
-       test_cmp expected-err actual-err
+       test_cmp expected-files actual-files
 '
 
 test_expect_success 'merge removes empty directories' '