On Thu, Sep 26, 2019 at 09:39:58PM +0200, Johannes Schindelin wrote: > Hi, > > On Thu, 26 Sep 2019, SZEDER Gábor wrote: > > > On Thu, Sep 26, 2019 at 01:04:48PM +0200, Johannes Schindelin wrote: > > > > > > > Also, things like the code tracing via `-x` (which relies on Bash > > > > > > > functionality in order to work properly, > > > > > > > > > > > > Not really. > > > > > > > > > > To work properly. What I meant was the trick we need to play with > > > > > `BASH_XTRACEFD`. > > > > > > > > I'm still unsure what BASH_XTRACEFD trick you mean. AFAICT we don't > > > > play any tricks with it to make '-x' work properly, and indeed '-x' > > > > tracing works properly even without BASH_XTRACEFD (and to achive that > > > > we did have to play some tricks, but not any with BASH_XTRACEFD; > > > > perhaps these tricks are what you meant?). > > > > > > It works okay some of the time. > > > > As far as I can tell it works all the time. > > I must be misinterpreting this part of `t/test-lib.sh`, then: Ok, let me try to clarify. There are a couple of things that we can't do in our tests without BASH_XTRACEFD, e.g. redirecting the standard error of a subshell or a loop to a file and then check that file with 'test_cmp' or 'test_must_be_empty'. With tracing enabled but without BASH_XTRACEFD, the trace of the commands executed within the subshell or loop end up in that file as well, and cause failure (grepping through that file is mostly ok, though). Back then we had 23 test cases failing because they were doing things like this and needed to be fixed, so considering the total number of test cases we only rarely used such problematic constructs. Still, as I recall, Peff was concerned that these limitations might lead to maintenance burden on the long run, so I decided to add an escape hatch, just in case someone constructs such an elaborate test script, where redirecting the stderr of a compound command could considerably simplify the tests. That snippet of code that you copied is this escape hatch: if $test_untraceable is set to a non-empty value before sourcing 'test-lib.sh', then tracing will only be enabled if BASH_XTRACEFD is available. All that was over a year and a half ago, and these limitations weren't a maintenance burden at all so far, and nobody needed that escape hatch. Well, nobody except me, that is :) When I saw back then that t1510 saves the stderr of nested function calls with 7 parameters, I shrugged in disgust, admitted defeat, and simply reached for that escape hatch: partly because I couldn't be bothered to figure out how that test script works, but more importantly because I didn't want to risk that any cleanup inadvertently hides a bug in the future. So that's the only user that piece of code ever had, and I certainly hope that no other test script will ever grow so complicated that it will need this escape hatch. I would actually prefer to remove it, but t1510 must be cleaned up first... so I'm afraid it will be with us for a while. > -- snipsnap -- > if test -n "$trace" && test -n "$test_untraceable" > then > # '-x' tracing requested, but this test script can't be reliably > # traced, unless it is run with a Bash version supporting > # BASH_XTRACEFD (introduced in Bash v4.1). > # > # Perform this version check _after_ the test script was > # potentially re-executed with $TEST_SHELL_PATH for '--tee' or > # '--verbose-log', so the right shell is checked and the > # warning is issued only once. > if test -n "$BASH_VERSION" && eval ' > test ${BASH_VERSINFO[0]} -gt 4 || { > test ${BASH_VERSINFO[0]} -eq 4 && > test ${BASH_VERSINFO[1]} -ge 1 > } > ' > then > : Executed by a Bash version supporting BASH_XTRACEFD. Good. > else > echo >&2 "warning: ignoring -x; '$0' is untraceable without BASH_XTRACEFD" > trace= > fi > fi