test-lib.sh: support -x option for shell-tracing
authorJeff King <peff@peff.net>
Fri, 10 Oct 2014 06:47:27 +0000 (02:47 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Oct 2014 22:39:57 +0000 (15:39 -0700)
commita136f6d8ff290ab486c85cd12d1a9a47d53b432d
treeec181965b1cd4eb9098ede39b290fd6101e60037
parent8ad16524183baf196d1db82b99ef52d05ca438e9
test-lib.sh: support -x option for shell-tracing

Usually running a test under "-v" makes it clear which
command is failing. However, sometimes it can be useful to
also see a complete trace of the shell commands being run in
the test. You can do so without any support from the test
suite by running "sh -x tXXXX-foo.sh". However, this
produces quite a large bit of output, as we see a trace of
the entire test suite.

This patch instead introduces a "-x" option to the test
scripts (i.e., "./tXXXX-foo.sh -x"). When enabled, this
turns on "set -x" only for the tests themselves. This can
still be a bit verbose, but should keep things to a more
manageable level. You can even use "--verbose-only" to see
the trace only for a specific test.

The implementation is a little invasive. We turn on the "set
-x" inside the "eval" of the test code. This lets the eval
itself avoid being reported in the trace (which would be
long, and redundant with the verbose listing we already
showed). And then after the eval runs, we do some trickery
with stderr to avoid showing the "set +x" to the user.

We also show traces for test_cleanup functions (since they
can impact the test outcome, too). However, we do avoid
running the noop ":" cleanup (the default if the test does
not use test_cleanup at all), as it creates unnecessary
noise in the "set -x" output.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/README
t/test-lib.sh