Hi Elijah, On Thu, 5 Apr 2018, Elijah Newren wrote: > On Thu, Apr 5, 2018 at 12:57 PM, Johannes Schindelin > <Johannes.Schindelin@xxxxxx> wrote: > > > 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. > > That all looks great to me. But at this point, it seems like it's a > full rewrite and your patch to submit (which I'd be happy to endorse > in lieu of my own)... :-) > or do you want me to submit with you as author and me as committer? That would be my preference. I have not even tested what I wrote above... > Also, a side question: if we go this route, do we want to rename > GIT_TEST_GDB to reflect its expanded usage? Sure. Probably GIT_TEST_DEBUGGER? Or GIT_TEST_DBG? Or GIT_TEST_DEBUG? > > 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 > > No, for most (60-80%?) of my invocations, I wouldn't be able to use > the debug function; only a minority of my uses are from within the > testsuite. The rest are from the command line (I have > git/bin-wrappers/ in my $PATH), Oy vey. bin-wrappers in your PATH? That's even worse than what I did in the first two years of developing Git: I always ran `git` in-place. However, I was bitten by a couple of bugs introduced while developing that made it hard to recover (if I don't have a functional Git, I cannot use it to go back to a working version, can I?). How do *you* deal with these things? > so the above suggestions would mean that my invocation would become: > > GIT_TEST_GDB="nemiver" git $ARGS > GIT_TEST_GDB="valgrind --tool-memcheck --track-origins=yes" git $ARGS Right. > > (In any case, "GIT_WRAPPER" is probably a name in want of being renamed.) > > Well, with your suggestion, it'd just be whatever that environment > variable is named. I'm perfectly happy with something other than > GIT_WRAPPER (or GIT_TEST_GDB). I'm not so good at coming up with such > myself, but maybe something like GIT_DEBUGGER or GIT_DEBUG_WITH? I like both. Pick whatever you like, as long as it starts with `GIT_` and is descriptive enough. Even `GIT_LAUNCH_THROUGH` would work, but `GIT_DEBUGGER` seems to be the shortest that still makes sense. Ciao, Dscho