test-lib: make BAIL_OUT() work in tests and prereq

BAIL_OUT() is meant to abort the whole test run and print a message with a standard prefix that can be parsed to stdout. Since for every test the normal fd`s are redirected in test_eval_ this output would not be seen when used within the context of a test or prereq like we do in test_have_prereq(). To make this function work in these contexts we move the setup of the fd aliases a few lines up before the first use of BAIL_OUT() and then have this function always print to the alias. Signed-off-by: Fabian Stelzer <fs@gigacodes.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fabian Stelzer committed Dec 1, 2021 at 09:53 UTC a6714088e0c03cf9e5820d54d4f9f3aece8af2e1
1 file changed +10 -4
t/test-lib.sh
+10 -4
@@ -589,6 +589,15 @@ USER_TERM="$TERM"
589 TERM=dumb
590 export TERM USER_TERM
591
592 +# What is written by tests to stdout and stderr is sent to different places
593 +# depending on the test mode (e.g. /dev/null in non-verbose mode, piped to tee
594 +# with --tee option, etc.). We save the original stdin to FD #6 and stdout and
595 +# stderr to #5 and #7, so that the test framework can use them (e.g. for
596 +# printing errors within the test framework) independently of the test mode.
597 +exec 5>&1
598 +exec 6<&0
599 +exec 7>&2
600 +
601 _error_exit () {
602 finalize_junit_xml
603 GIT_EXIT_OK=t
@@ -612,7 +621,7 @@ BAIL_OUT () {
621 local bail_out="Bail out! "
622 local message="$1"
623
615 - say_color error $bail_out "$message"
624 + say_color >&5 error $bail_out "$message"
625 _error_exit
626 }
627
@@ -637,9 +646,6 @@ then
646 exit 0
647 fi
648
640 -exec 5>&1
641 -exec 6<&0
642 -exec 7>&2
649 if test "$verbose_log" = "t"
650 then
651 exec 3>>"$GIT_TEST_TEE_OUTPUT_FILE" 4>&3