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