Hi Elijah,
On Thu, 5 Apr 2018, Elijah Newren wrote:
> This allows us to run git, when using the script from bin-wrappers, under
> other programs. A few examples:
> GIT_WRAPPER=nemiver git $ARGS
> GIT_WRAPPER="valgrind --tool=memcheck --track-origins=yes" git $ARGS
>
> Yes, we already have GIT_TEST_GDB (which could potentially be replaced
> with GIT_WRAPPER="gdb --args"), and a bunch of options for running
> a testcase or multiple testcases under valgrind, but I find the extra
> flexibility useful.
It would be even more useful if it could be made to work interactively,
too, by removing those redirections. The `debug` function does this
thusly:
debug () {
GIT_TEST_GDB=1 "$@" <&6 >&5 2>&7
}
I wonder whether a better approach would be to add an optional argument to
that `debug` function (which is intended to have `git` as first argument,
anyway, or at least a command/function that does not start with a dash):
debug_aux () {
shift
"$@" <&6 >&5 2>&7
}
debug () {
case "$1" in
-d)
shift &&
GIT_TEST_GDB="$1" debug_aux "$@"
;;
--debugger=*)
GIT_TEST_GDB="${1#*=}" debug_aux "$@"
;;
*)
GIT_TEST_GDB=1 "$@" <&6 >&5 2>&7
;;
esac
}
... and then in wrap-for-bin.sh, we would replace the last lines
if test -n "$GIT_TEST_GDB"
then
unset GIT_TEST_GDB
exec gdb --args "${GIT_EXEC_PATH}/@@PROG@@" "$@"
else
exec "${GIT_EXEC_PATH}/@@PROG@@" "$@"
fi
by
case "$GIT_TEST_GDB" in
'')
exec "${GIT_EXEC_PATH}/@@PROG@@" "$@"
;;
1)
unset GIT_TEST_GDB
exec gdb --args "${GIT_EXEC_PATH}/@@PROG@@" "$@"
;;
*)
GIT_TEST_GDB_$$="$GIT_TEST_GDB"
unset GIT_TEST_GDB
exec $GIT_TEST_GDB_$$ "${GIT_EXEC_PATH}/@@PROG@@" "$@"
;;
esac
or some such.
Then your magic "GIT_WRAPPER" invocation would become a bit more explicit:
debug --debugger=nemiver git $ARGS
debug -d "valgrind --tool=memcheck --track-origins=yes" git $ARGS
(In any case, "GIT_WRAPPER" is probably a name in want of being renamed.)
Ciao,
Dscho