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

Reply via email to