From: Fabian Stelzer Date: Tue, 30 Nov 2021 14:38:21 GMT Subject: Re: [PATCH v3 3/3] test-lib: make BAIL_OUT() work in tests and prereq Message-ID: <20211130143821.7dz5jj2z2x2q2ytn@fs> In-Reply-To: On 28.11.2021 15:38, Junio C Hamano wrote: >Fabian Stelzer writes: > >>>I was expecting something along the lines of ... >>> >>># What is written by tests to their FD #1 and #2 are sent to >>># different places depending on the test mode (e.g. /dev/null in >>># non-verbose mode, piped to tee with --tee option, etc.) Original >>># FD #1 and #2 are saved away to #5 and #7, so that test framework >>># can use them to send the output to these low FDs before the >>># mode-specific redirection. >>> >>>... but this only talks about the output side. The final version >>>needs to mention the input side, too. >>> >> >> I like to use the term stdin/err/out since that is what i would grep for >> when trying to find out more about the test i/o behaviour. > >I do not mind phrasing "original FD #1" as "original standard >output" at all. I just wanted to make sure it is clear to readers >whose FD #1 and FD #5 we are talking about. In other words, the >readers should get a clear understanding of where they are writing >to, when the code they write in test_expect_success block outputs to >FD #1, and what the code needs to do if it wants to always show >something to the original standard output stream. The current version in my branch is now: What is written by tests to stdout and stderr is sent so different places depending on the test mode (e.g. /dev/null in non-verbose mode, piped to tee with --tee option, etc.). We save the original stdin to FD #6 and stdout and stderr to #5 and #7, so that the test framework can use them (e.g. for printing errors within the test framework) independently of the test mode. which I think should make this sufficiently clear. I'm wondering now though if we should write to #7 instead of #5 in BAIL_OUT(). The current use in test-lib/test-lib-functions seems a bit inconsistent. For example: error >&7 "bug in the test script: $*" echo >&7 "test_must_fail: only 'git' is allowed: $*" but: echo >&5 "FATAL: Cannot prepare test area" echo >&5 "FATAL: Unexpected exit with code $code" Sometimes these errors result in immediate exit 1, but not always. I'm not sure if the TAP framework that BAIL_OUT() references expects the bail out error on a specific fd.