t: add means to disable '-x' tracing for individual test scripts

The previous patch resolved most of the test failures caused by
running our test suite with '-x' tracing and /bin/sh, and the
following patches in this series will resolve almost all of the
remaining failures.  Unfortunately, not yet all.

Add means to disable '-x' tracing for individual test scripts by
setting the $test_untraceable variable to a non-empty value in the
test script before sourcing 'test-lib.sh'.  However, since '-x'
tracing is not an issue with recent Bash versions supporting
BASH_XTRACEFD, i.e. v4.1 and later, don't disable tracing when the
test script is run with such a Bash version even when
$test_untraceable is set.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
SZEDER Gábor 2018-02-24 00:39:42 +01:00 committed by Junio C Hamano
parent a5bf824f3b
commit 5fc98e79fc
2 changed files with 21 additions and 1 deletions

View File

@ -87,6 +87,9 @@ appropriately before running "make".
themselves. Implies `--verbose`. Note that in non-bash shells, themselves. Implies `--verbose`. Note that in non-bash shells,
this can cause failures in some tests which redirect and test this can cause failures in some tests which redirect and test
the output of shell functions. Use with caution. the output of shell functions. Use with caution.
Ignored in test scripts that set the variable 'test_untraceable'
to a non-empty value, unless it's run with a Bash version
supporting BASH_XTRACEFD, i.e. v4.1 or later.
-d:: -d::
--debug:: --debug::

View File

@ -263,7 +263,24 @@ do
GIT_TEST_CHAIN_LINT=0 GIT_TEST_CHAIN_LINT=0
shift ;; shift ;;
-x) -x)
# Some test scripts can't be reliably traced with '-x',
# unless the test is run with a Bash version supporting
# BASH_XTRACEFD (introduced in Bash v4.1). Check whether
# this test is marked as such, and ignore '-x' if it
# isn't executed with a suitable Bash version.
if test -z "$test_untraceable" || {
test -n "$BASH_VERSION" && {
test ${BASH_VERSINFO[0]} -gt 4 || {
test ${BASH_VERSINFO[0]} -eq 4 &&
test ${BASH_VERSINFO[1]} -ge 1
}
}
}
then
trace=t trace=t
else
echo >&2 "warning: ignoring -x; '$0' is untraceable without BASH_XTRACEFD"
fi
shift ;; shift ;;
--verbose-log) --verbose-log)
verbose_log=t verbose_log=t