Merge branch 'tr/valgrind'

Let us use not just memgrind but other *grind debuggers.

* tr/valgrind:
  tests: notice valgrind error in test_must_fail
  tests --valgrind: provide a mode without --track-origins
  tests: parameterize --valgrind option
  t/README: --valgrind already implies -v
This commit is contained in:
Junio C Hamano 2013-04-03 09:34:44 -07:00
commit d3ea5826e4
4 changed files with 44 additions and 17 deletions

View File

@ -92,17 +92,26 @@ appropriately before running "make".
This causes additional long-running tests to be run (where
available), for more exhaustive testing.
--valgrind::
Execute all Git binaries with valgrind and exit with status
126 on errors (just like regular tests, this will only stop
the test script when running under -i). Valgrind errors
go to stderr, so you might want to pass the -v option, too.
--valgrind=<tool>::
Execute all Git binaries under valgrind tool <tool> and exit
with status 126 on errors (just like regular tests, this will
only stop the test script when running under -i).
Since it makes no sense to run the tests with --valgrind and
not see any output, this option implies --verbose. For
convenience, it also implies --tee.
Note that valgrind is run with the option --leak-check=no,
<tool> defaults to 'memcheck', just like valgrind itself.
Other particularly useful choices include 'helgrind' and
'drd', but you may use any tool recognized by your valgrind
installation.
As a special case, <tool> can be 'memcheck-fast', which uses
memcheck but disables --track-origins. Use this if you are
running tests in bulk, to see if there are _any_ memory
issues.
Note that memcheck is run with the option --leak-check=no,
as the git process is short-lived and some errors are not
interesting. In order to run a single command under the same
conditions manually, you should set GIT_VALGRIND to point to

View File

@ -540,6 +540,9 @@ test_must_fail () {
elif test $exit_code = 127; then
echo >&2 "test_must_fail: command not found: $*"
return 1
elif test $exit_code = 126; then
echo >&2 "test_must_fail: valgrind error: $*"
return 1
fi
return 0
}

View File

@ -193,7 +193,11 @@ do
--no-color)
color=; shift ;;
--va|--val|--valg|--valgr|--valgri|--valgrin|--valgrind)
valgrind=t; verbose=t; shift ;;
valgrind=memcheck
shift ;;
--valgrind=*)
valgrind=$(expr "z$1" : 'z[^=]*=\(.*\)')
shift ;;
--tee)
shift ;; # was handled already
--root=*)
@ -204,6 +208,8 @@ do
esac
done
test -n "$valgrind" && verbose=t
if test -n "$color"
then
say_color () {
@ -530,6 +536,8 @@ then
PATH=$GIT_VALGRIND/bin:$PATH
GIT_EXEC_PATH=$GIT_VALGRIND/bin
export GIT_VALGRIND
GIT_VALGRIND_MODE="$valgrind"
export GIT_VALGRIND_MODE
elif test -n "$GIT_TEST_INSTALLED"
then
GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) ||

View File

@ -2,20 +2,27 @@
base=$(basename "$0")
TRACK_ORIGINS=
TOOL_OPTIONS='--leak-check=no'
VALGRIND_VERSION=$(valgrind --version)
VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
test 3 -gt "$VALGRIND_MAJOR" ||
test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
TRACK_ORIGINS=--track-origins=yes
case "$GIT_VALGRIND_MODE" in
memcheck-fast)
;;
memcheck)
VALGRIND_VERSION=$(valgrind --version)
VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
test 3 -gt "$VALGRIND_MAJOR" ||
test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
TOOL_OPTIONS="$TOOL_OPTIONS --track-origins=yes"
;;
*)
TOOL_OPTIONS="--tool=$GIT_VALGRIND_MODE"
esac
exec valgrind -q --error-exitcode=126 \
--leak-check=no \
--suppressions="$GIT_VALGRIND/default.supp" \
--gen-suppressions=all \
$TRACK_ORIGINS \
--suppressions="$GIT_VALGRIND/default.supp" \
$TOOL_OPTIONS \
--log-fd=4 \
--input-fd=4 \
$GIT_VALGRIND_OPTIONS \