Message ID | 20240525234454.1489598-3-iwienand@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v6,1/3] Documentation: alias: rework notes into points | expand |
Ian Wienand <iwienand@redhat.com> writes: > This adds a trace point in start_command so we can see the full > command invocation without having to resort to strace/code inspection. > For example: > > $ GIT_TRACE=1 git test foo > git.c:755 trace: exec: git-test foo > run-command.c:657 trace: run_command: git-test foo > run-command.c:657 trace: run_command: 'echo $*' foo > run-command.c:749 trace: start_command: /bin/sh -c 'echo $* "$@"' 'echo $*' foo > > Prior changes have made the documentation around the internals of the > alias command execution clearer, but I have still found this detailed > view of the aliased command being run helpful for debugging purposes. > > A test case is added. This simply looks for the trace point output; > the details change depending on platform -- the important thing is > that we have a verbose log point, not so much the details of what > happens on each platform. > > Signed-off-by: Ian Wienand <iwienand@redhat.com> > --- > run-command.c | 3 +++ > t/t0014-alias.sh | 12 ++++++++++++ > 2 files changed, 15 insertions(+) > > diff --git a/run-command.c b/run-command.c > index 1b821042b4..31b20123d8 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -746,6 +746,8 @@ int start_command(struct child_process *cmd) > goto end_of_spawn; > } > > + trace_argv_printf(&argv.v[1], "trace: start_command:"); > + > if (pipe(notify_pipe)) > notify_pipe[0] = notify_pipe[1] = -1; > > @@ -913,6 +915,7 @@ int start_command(struct child_process *cmd) > else if (cmd->use_shell) > cmd->args.v = prepare_shell_cmd(&nargv, sargv); > > + trace_argv_printf(cmd->args.v, "trace: start_command:"); > cmd->pid = mingw_spawnvpe(cmd->args.v[0], cmd->args.v, > (char**) cmd->env.v, > cmd->dir, fhin, fhout, fherr); > diff --git a/t/t0014-alias.sh b/t/t0014-alias.sh > index 95568342be..634f6d78ef 100755 > --- a/t/t0014-alias.sh > +++ b/t/t0014-alias.sh > @@ -44,4 +44,16 @@ test_expect_success 'run-command formats empty args properly' ' > test_cmp expect actual > ' > > +test_expect_success 'tracing a shell alias with arguments shows trace of prepared command' ' > + cat >expect <<-EOF && > + trace: start_command: SHELL -c ${SQ}echo \$* "\$@"${SQ} ${SQ}echo \$*${SQ} arg > + EOF > + git config alias.echo "!echo \$*" && > + env GIT_TRACE=1 git echo arg 2>output && > + # redact platform differences > + cat output && That "cat" is not about "redact"ing platform differences. Leftover debugging? I'll remove it while queuing. > + sed -n -e "s/^\(trace: start_command:\) .* -c /\1 SHELL -c /p" output >actual && > + test_cmp expect actual > +' Other than that, this step looks good to me. Thanks.
diff --git a/run-command.c b/run-command.c index 1b821042b4..31b20123d8 100644 --- a/run-command.c +++ b/run-command.c @@ -746,6 +746,8 @@ int start_command(struct child_process *cmd) goto end_of_spawn; } + trace_argv_printf(&argv.v[1], "trace: start_command:"); + if (pipe(notify_pipe)) notify_pipe[0] = notify_pipe[1] = -1; @@ -913,6 +915,7 @@ int start_command(struct child_process *cmd) else if (cmd->use_shell) cmd->args.v = prepare_shell_cmd(&nargv, sargv); + trace_argv_printf(cmd->args.v, "trace: start_command:"); cmd->pid = mingw_spawnvpe(cmd->args.v[0], cmd->args.v, (char**) cmd->env.v, cmd->dir, fhin, fhout, fherr); diff --git a/t/t0014-alias.sh b/t/t0014-alias.sh index 95568342be..634f6d78ef 100755 --- a/t/t0014-alias.sh +++ b/t/t0014-alias.sh @@ -44,4 +44,16 @@ test_expect_success 'run-command formats empty args properly' ' test_cmp expect actual ' +test_expect_success 'tracing a shell alias with arguments shows trace of prepared command' ' + cat >expect <<-EOF && + trace: start_command: SHELL -c ${SQ}echo \$* "\$@"${SQ} ${SQ}echo \$*${SQ} arg + EOF + git config alias.echo "!echo \$*" && + env GIT_TRACE=1 git echo arg 2>output && + # redact platform differences + cat output && + sed -n -e "s/^\(trace: start_command:\) .* -c /\1 SHELL -c /p" output >actual && + test_cmp expect actual +' + test_done
This adds a trace point in start_command so we can see the full command invocation without having to resort to strace/code inspection. For example: $ GIT_TRACE=1 git test foo git.c:755 trace: exec: git-test foo run-command.c:657 trace: run_command: git-test foo run-command.c:657 trace: run_command: 'echo $*' foo run-command.c:749 trace: start_command: /bin/sh -c 'echo $* "$@"' 'echo $*' foo Prior changes have made the documentation around the internals of the alias command execution clearer, but I have still found this detailed view of the aliased command being run helpful for debugging purposes. A test case is added. This simply looks for the trace point output; the details change depending on platform -- the important thing is that we have a verbose log point, not so much the details of what happens on each platform. Signed-off-by: Ian Wienand <iwienand@redhat.com> --- run-command.c | 3 +++ t/t0014-alias.sh | 12 ++++++++++++ 2 files changed, 15 insertions(+)