summaryrefslogtreecommitdiff
path: root/t/README
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2016-05-11 13:44:04 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-05-11 21:03:14 (GMT)
commitd88785e424aaf18aa3ca291c2299c599c000c6cb (patch)
tree5e42e0642fd0ec94d842beb1d53ad674a9bd92e5 /t/README
parent765428699a5381f113d19974720bc91b5bfeaf1d (diff)
downloadgit-d88785e424aaf18aa3ca291c2299c599c000c6cb.zip
git-d88785e424aaf18aa3ca291c2299c599c000c6cb.tar.gz
git-d88785e424aaf18aa3ca291c2299c599c000c6cb.tar.bz2
test-lib: set BASH_XTRACEFD automatically
Passing "-x" to a test script enables the shell's "set -x" tracing, which can help with tracking down the command that is causing a failure. Unfortunately, it can also _cause_ failures in some tests that redirect the stderr of a shell function. Inside the function the shell continues to respect "set -x", and the trace output is collected along with whatever stderr is generated normally by the function. You can see an example of this by running: ./t0040-parse-options.sh -x -i which will fail immediately in the first test, as it expects: test_must_fail some-cmd 2>output.err to leave output.err empty (but with "-x" it has our trace output). Unfortunately there isn't a portable or scalable solution to this. We could teach test_must_fail to disable "set -x", but that doesn't help any of the other functions or subshells. However, we can work around it by pointing the "set -x" output to our descriptor 4, which always points to the original stderr of the test script. Unfortunately this only works for bash, but it's better than nothing (and other shells will just ignore the BASH_XTRACEFD variable). The patch itself is a simple one-liner, but note the caveats in the accompanying comments. Automatic tests for our "-x" option may be a bit too meta (and a pain, because they are bash-specific), but I did confirm that it works correctly both with regular "-x" and with "--verbose-only=1". This works because the latter flips "set -x" off and on for particular tests (if it didn't, we would get tracing for all tests, as going to descriptor 4 effectively circumvents the verbose flag). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/README')
-rw-r--r--t/README6
1 files changed, 3 insertions, 3 deletions
diff --git a/t/README b/t/README
index 35438bc..009e339 100644
--- a/t/README
+++ b/t/README
@@ -84,9 +84,9 @@ appropriately before running "make".
-x::
Turn on shell tracing (i.e., `set -x`) during the tests
- themselves. Implies `--verbose`. Note that this can cause
- failures in some tests which redirect and test the
- output of shell functions. Use with caution.
+ 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.
-d::
--debug::