t: add means to disable '-x' tracing for individual test scripts
authorSZEDER Gábor <szeder.dev@gmail.com>
Fri, 23 Feb 2018 23:39:42 +0000 (00:39 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 Feb 2018 20:43:13 +0000 (12:43 -0800)
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>
t/README
t/test-lib.sh
index b3f7b449c366c2d7d7afd12139a54b7a588f9747..c430e9c52c12c4bb640ae1307d83b92d12acdc9a 100644 (file)
--- a/t/README
+++ b/t/README
@@ -87,6 +87,9 @@ appropriately before running "make".
        themselves. Implies `--verbose`. Note that in non-bash shells,
        this can cause failures in some tests which redirect and test
        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::
 --debug::
index 33f6ce26f69d442238c60619a5f70673d451a7fb..732213ef1b1934631c0d6f8bcb3fea4c50bbbd0f 100644 (file)
@@ -263,7 +263,24 @@ do
                GIT_TEST_CHAIN_LINT=0
                shift ;;
        -x)
-               trace=t
+               # 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
+               else
+                       echo >&2 "warning: ignoring -x; '$0' is untraceable without BASH_XTRACEFD"
+               fi
                shift ;;
        --verbose-log)
                verbose_log=t