test-lib: valgrind for only tests matching a pattern
With the new --valgrind-only=<pattern> option, one can enable --valgrind at a per-test granularity, exactly analogous to --verbose-only from the previous commit. The options are wired such that --valgrind implies --verbose (as before), but --valgrind-only=<pattern> implies --verbose-only=<pattern> unless --verbose is also in effect. Signed-off-by: Thomas Rast <trast@inf.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ff09af3fb8
commit
5dfc368f5e
5
t/README
5
t/README
@ -126,6 +126,11 @@ appropriately before running "make".
|
||||
the 't/valgrind/' directory and use the commands under
|
||||
't/valgrind/bin/'.
|
||||
|
||||
--valgrind-only=<pattern>::
|
||||
Like --valgrind, but the effect is limited to tests with
|
||||
numbers matching <pattern>. The number matched against is
|
||||
simply the running count of the test within the file.
|
||||
|
||||
--tee::
|
||||
In addition to printing the test output to the terminal,
|
||||
write it to files named 't/test-results/$TEST_NAME.out'.
|
||||
|
@ -201,6 +201,9 @@ do
|
||||
--valgrind=*)
|
||||
valgrind=$(expr "z$1" : 'z[^=]*=\(.*\)')
|
||||
shift ;;
|
||||
--valgrind-only=*)
|
||||
valgrind_only=$(expr "z$1" : 'z[^=]*=\(.*\)')
|
||||
shift ;;
|
||||
--tee)
|
||||
shift ;; # was handled already
|
||||
--root=*)
|
||||
@ -211,7 +214,14 @@ do
|
||||
esac
|
||||
done
|
||||
|
||||
test -n "$valgrind" && verbose=t
|
||||
if test -n "$valgrind_only"
|
||||
then
|
||||
test -z "$valgrind" && valgrind=memcheck
|
||||
test -z "$verbose" && verbose_only="$valgrind_only"
|
||||
elif test -n "$valgrind"
|
||||
then
|
||||
verbose=t
|
||||
fi
|
||||
|
||||
if test -n "$color"
|
||||
then
|
||||
@ -371,6 +381,25 @@ maybe_setup_verbose () {
|
||||
last_verbose=$verbose
|
||||
}
|
||||
|
||||
maybe_teardown_valgrind () {
|
||||
test -z "$GIT_VALGRIND" && return
|
||||
GIT_VALGRIND_ENABLED=
|
||||
}
|
||||
|
||||
maybe_setup_valgrind () {
|
||||
test -z "$GIT_VALGRIND" && return
|
||||
if test -z "$valgrind_only"
|
||||
then
|
||||
GIT_VALGRIND_ENABLED=t
|
||||
return
|
||||
fi
|
||||
GIT_VALGRIND_ENABLED=
|
||||
if match_pattern_list $test_count $valgrind_only
|
||||
then
|
||||
GIT_VALGRIND_ENABLED=t
|
||||
fi
|
||||
}
|
||||
|
||||
test_eval_ () {
|
||||
# This is a separate function because some tests use
|
||||
# "return" to end a test_expect_success block early.
|
||||
@ -401,10 +430,12 @@ test_run_ () {
|
||||
test_start_ () {
|
||||
test_count=$(($test_count+1))
|
||||
maybe_setup_verbose
|
||||
maybe_setup_valgrind
|
||||
}
|
||||
|
||||
test_finish_ () {
|
||||
echo >&3 ""
|
||||
maybe_teardown_valgrind
|
||||
maybe_teardown_verbose
|
||||
}
|
||||
|
||||
@ -590,6 +621,9 @@ then
|
||||
export GIT_VALGRIND
|
||||
GIT_VALGRIND_MODE="$valgrind"
|
||||
export GIT_VALGRIND_MODE
|
||||
GIT_VALGRIND_ENABLED=t
|
||||
test -n "$valgrind_only" && GIT_VALGRIND_ENABLED=
|
||||
export GIT_VALGRIND_ENABLED
|
||||
elif test -n "$GIT_TEST_INSTALLED"
|
||||
then
|
||||
GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) ||
|
||||
|
@ -4,6 +4,9 @@ base=$(basename "$0")
|
||||
|
||||
TOOL_OPTIONS='--leak-check=no'
|
||||
|
||||
test -z "$GIT_VALGRIND_ENABLED" &&
|
||||
exec "$GIT_VALGRIND"/../../"$base" "$@"
|
||||
|
||||
case "$GIT_VALGRIND_MODE" in
|
||||
memcheck-fast)
|
||||
;;
|
||||
|
Loading…
Reference in New Issue
Block a user