Browse Source

Merge branch 'jk/tap-verbose-fix'

The Travis CI configuration we ship ran the tests with --verbose
option but this risks non-TAP output that happens to be "ok" to be
misinterpreted as TAP signalling a test that passed.  This resulted
in unnecessary failure.  This has been corrected by introducing a
new mode to run our tests in the test harness to send the verbose
output separately to the log file.

* jk/tap-verbose-fix:
  test-lib: bail out when "-v" used under "prove"
  travis: use --verbose-log test option
  test-lib: add --verbose-log option
  test-lib: handle TEST_OUTPUT_DIRECTORY with spaces
maint
Junio C Hamano 8 years ago
parent
commit
f4db874d9a
  1. 2
      .travis.yml
  2. 6
      t/README
  3. 34
      t/test-lib.sh

2
.travis.yml

@ -31,7 +31,7 @@ env: @@ -31,7 +31,7 @@ env:
- LINUX_GIT_LFS_VERSION="1.2.0"
- DEFAULT_TEST_TARGET=prove
- GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
- GIT_TEST_OPTS="--verbose --tee"
- GIT_TEST_OPTS="--verbose-log"
- GIT_TEST_HTTPD=true
- GIT_TEST_CLONE_2GB=YesPlease
# t9810 occasionally fails on Travis CI OS X

6
t/README

@ -153,6 +153,12 @@ appropriately before running "make". @@ -153,6 +153,12 @@ appropriately before running "make".
As the names depend on the tests' file names, it is safe to
run the tests with this option in parallel.

--verbose-log::
Write verbose output to the same logfile as `--tee`, but do
_not_ write it to stdout. Unlike `--tee --verbose`, this option
is safe to use when stdout is being consumed by a TAP parser
like `prove`. Implies `--tee` and `--verbose`.

--with-dashes::
By default tests are run without dashed forms of
commands (like git-commit) in the PATH (it only uses

34
t/test-lib.sh

@ -54,12 +54,22 @@ case "$GIT_TEST_TEE_STARTED, $* " in @@ -54,12 +54,22 @@ case "$GIT_TEST_TEE_STARTED, $* " in
done,*)
# do not redirect again
;;
*' --tee '*|*' --va'*)
*' --tee '*|*' --va'*|*' --verbose-log '*)
mkdir -p "$TEST_OUTPUT_DIRECTORY/test-results"
BASE="$TEST_OUTPUT_DIRECTORY/test-results/$(basename "$0" .sh)"

# Make this filename available to the sub-process in case it is using
# --verbose-log.
GIT_TEST_TEE_OUTPUT_FILE=$BASE.out
export GIT_TEST_TEE_OUTPUT_FILE

# Truncate before calling "tee -a" to get rid of the results
# from any previous runs.
>"$GIT_TEST_TEE_OUTPUT_FILE"

(GIT_TEST_TEE_STARTED=done ${SHELL_PATH} "$0" "$@" 2>&1;
echo $? > $BASE.exit) | tee $BASE.out
test "$(cat $BASE.exit)" = 0
echo $? >"$BASE.exit") | tee -a "$GIT_TEST_TEE_OUTPUT_FILE"
test "$(cat "$BASE.exit")" = 0
exit
;;
esac
@ -246,6 +256,9 @@ do @@ -246,6 +256,9 @@ do
trace=t
verbose=t
shift ;;
--verbose-log)
verbose_log=t
shift ;;
*)
echo "error: unknown test option '$1'" >&2; exit 1 ;;
esac
@ -308,6 +321,16 @@ say () { @@ -308,6 +321,16 @@ say () {
say_color info "$*"
}

if test -n "$HARNESS_ACTIVE"
then
if test "$verbose" = t || test -n "$verbose_only"
then
printf 'Bail out! %s\n' \
'verbose mode forbidden under TAP harness; try --verbose-log'
exit 1
fi
fi

test "${test_description}" != "" ||
error "Test script did not set test_description."

@ -319,7 +342,10 @@ fi @@ -319,7 +342,10 @@ fi

exec 5>&1
exec 6<&0
if test "$verbose" = "t"
if test "$verbose_log" = "t"
then
exec 3>>"$GIT_TEST_TEE_OUTPUT_FILE" 4>&3
elif test "$verbose" = "t"
then
exec 4>&2 3>&1
else

Loading…
Cancel
Save