git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] test-lib: disable trace when test is not verbose

From
Jeff King <peff@peff.net>
Date
Aug 6, 2015, 05:33 UTC
Message-ID
<20150806053356.GB32703@sigill.intra.peff.net>
In-Reply-To
<20150806052940.GA32445@sigill.intra.peff.net>

The "-x" test-script option turns on the shell's "-x" tracing, which can help show why a particular test is failing. Unfortunately, this can create false negatives in some tests if they invoke a shell function with its stderr redirected. t5512.10 is such a test, as it does:

    test_must_fail git ls-remote refs*master >actual 2>&1 &&
    test_cmp exp actual

The "actual" file gets the "-x" trace for the test_must_fail function, which prevents it from matching the expected output.

There's no way to avoid this without managing the trace flag inside each sub-function, which isn't really a workable solution. But unless you specifically care about t5512.10, we can work around it by enabling tracing only for the specific tests we want.

You can already do:
    ./t5512-ls-remote.sh -x --verbose-only=16

to see the trace only for a specific test. But that doesn't _disable_ the tracing in the other tests; it just sends it to /dev/null. However, there's no point in generating a trace that the user won't see, so we can simply disable tracing whenever it doesn't have a matching verbose flag.

The normal case of just "./t5512-ls-remote.sh -x" stays the same, as "-x" already implies "--verbose" (and "--verbose-only" overrides "--verbose", which is why this works at all). And for our test, we need only check $verbose, as maybe_setup_verbose will have already set that flag based on the $verbose_only list).

Signed-off-by: Jeff King <peff@peff.net>
---
 t/test-lib.sh | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 374bfcb..16c4d7b 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -531,6 +531,10 @@ maybe_setup_valgrind () {
 	fi
 }
 
+want_trace () {
+	test "$trace" = t && test "$verbose" = t
+}
+
 # This is a separate function because some tests use
 # "return" to end a test_expect_success block early
 # (and we want to make sure we run any cleanup like
@@ -538,7 +542,7 @@ maybe_setup_valgrind () {
 test_eval_inner_ () {
 	# Do not add anything extra (including LF) after '$*'
 	eval "
-		test \"$trace\" = t && set -x
+		want_trace && set -x
 		$*"
 }
 
@@ -554,7 +558,7 @@ test_eval_ () {
 	{
 		test_eval_inner_ "$@" </dev/null >&3 2>&4
 		test_eval_ret_=$?
-		if test "$trace" = t
+		if want_trace
 		then
 			set +x
 			if test "$test_eval_ret_" != 0
-- 
2.5.0.148.g63828c1
Previous: Jeff KingNext: Junio C Hamano
Message 8 of 10 in “What's cooking in git.git”
  1. Junio C HamanoAug 5, 2015
  2. David TurnerAug 5, 2015
  3. Junio C HamanoAug 5, 2015
  4. Junio C HamanoAug 7, 2015
  5. Jeff KingAug 6, 2015
  6. 0/2 ./t5512-*.sh -x complaintsJeff King, Aug 6, 2015
  7. 1/2 test-lib: turn off "-x" tracing during chain-lint checkJeff King, Aug 6, 2015
  8. 2/2 test-lib: disable trace when test is not verboseJeff King, Aug 6, 2015
  9. Junio C HamanoAug 7, 2015
  10. Johannes SchindelinAug 6, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.