t: send verbose test-helper output to fd 4
Test helper functions like test_must_fail may produce messages to stderr when they see a problem. When the tests are run with "--verbose", this ends up on the test script's stderr, and the user can read it. But there's a problem. Some tests record stderr as part of the test, like: test_must_fail git foo 2>output && test_i18ngrep expected.message output In this case the error text goes into "output". This makes the --verbose output less useful (it also means we might accidentally match it in the second, though in practice we tend to produce these messages only on error, so we'd abort the test when the first command fails). Let's instead send this user-facing output directly to descriptor 4, which always points to the original stderr (or /dev/null in non-verbose mode). And it's already forbidden to redirect descriptor 4, since we use it for BASH_XTRACEFD, as explained in 9be795fbce (t5615: avoid re-using descriptor 4, 2017-12-08). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e3a80781f5
commit
03aa3783f2
@ -625,22 +625,22 @@ test_must_fail () {
|
||||
exit_code=$?
|
||||
if test $exit_code -eq 0 && ! list_contains "$_test_ok" success
|
||||
then
|
||||
echo >&2 "test_must_fail: command succeeded: $*"
|
||||
echo >&4 "test_must_fail: command succeeded: $*"
|
||||
return 1
|
||||
elif test_match_signal 13 $exit_code && list_contains "$_test_ok" sigpipe
|
||||
then
|
||||
return 0
|
||||
elif test $exit_code -gt 129 && test $exit_code -le 192
|
||||
then
|
||||
echo >&2 "test_must_fail: died by signal $(($exit_code - 128)): $*"
|
||||
echo >&4 "test_must_fail: died by signal $(($exit_code - 128)): $*"
|
||||
return 1
|
||||
elif test $exit_code -eq 127
|
||||
then
|
||||
echo >&2 "test_must_fail: command not found: $*"
|
||||
echo >&4 "test_must_fail: command not found: $*"
|
||||
return 1
|
||||
elif test $exit_code -eq 126
|
||||
then
|
||||
echo >&2 "test_must_fail: valgrind error: $*"
|
||||
echo >&4 "test_must_fail: valgrind error: $*"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
@ -678,7 +678,7 @@ test_expect_code () {
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo >&2 "test_expect_code: command exited with $exit_code, we wanted $want_code $*"
|
||||
echo >&4 "test_expect_code: command exited with $exit_code, we wanted $want_code $*"
|
||||
return 1
|
||||
}
|
||||
|
||||
@ -742,18 +742,18 @@ test_i18ngrep () {
|
||||
shift
|
||||
! grep "$@" && return 0
|
||||
|
||||
echo >&2 "error: '! grep $@' did find a match in:"
|
||||
echo >&4 "error: '! grep $@' did find a match in:"
|
||||
else
|
||||
grep "$@" && return 0
|
||||
|
||||
echo >&2 "error: 'grep $@' didn't find a match in:"
|
||||
echo >&4 "error: 'grep $@' didn't find a match in:"
|
||||
fi
|
||||
|
||||
if test -s "$last_arg"
|
||||
then
|
||||
cat >&2 "$last_arg"
|
||||
cat >&4 "$last_arg"
|
||||
else
|
||||
echo >&2 "<File '$last_arg' is empty>"
|
||||
echo >&4 "<File '$last_arg' is empty>"
|
||||
fi
|
||||
|
||||
return 1
|
||||
@ -764,7 +764,7 @@ test_i18ngrep () {
|
||||
# not output anything when they fail.
|
||||
verbose () {
|
||||
"$@" && return 0
|
||||
echo >&2 "command failed: $(git rev-parse --sq-quote "$@")"
|
||||
echo >&4 "command failed: $(git rev-parse --sq-quote "$@")"
|
||||
return 1
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user