Re: [PATCH v4 3/3] run-command: show prepared command

Junio C Hamano
2024-05-24T19:16:37Z

Ian Wienand <iwienand@redhat.com> writes:

> +test_expect_success 'tracing a shell alias with arguments shows trace of prepared command' '
> + git config alias.echo "!echo \$*" &&
> + env GIT_TRACE=1 git echo argument 2>output &&
> + test_grep "^trace: prepare_cmd:.*" output
> +'

If you run

$ cd t && sh ./t0014-alias.sh -d && cat trash*.t0014-alias/output

you'll see two "prepare_cmd" logged, because you added one to
prepare_shell_cmd() and another to prepare_cmd(). If you were
tracing something that uses prepare_git_cmd() on Windows, you would
not see any trace output, on the other hand, I would suspect (I do
not do Windows so this is from code inspection only).

Perhaps squashing something like this is sufficient?

run-command.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git c/run-command.c w/run-command.c
index 13e35fb76e..7eb68a541d 100644
--- c/run-command.c
+++ w/run-command.c
@@ -296,7 +296,6 @@ static const char **prepare_shell_cmd(struct strvec *out, const char **argv)
}

strvec_pushv(out, argv);
- trace_argv_printf(&out->v[1], "trace: prepare_cmd:");
return out->v;
}

@@ -436,7 +435,6 @@ static int prepare_cmd(struct strvec *out, const struct child_process *cmd)
}
}

- trace_argv_printf(&out->v[1], "trace: prepare_cmd:");
return 0;
}

@@ -747,6 +745,7 @@ int start_command(struct child_process *cmd)
error_errno("cannot run %s", cmd->args.v[0]);
goto end_of_spawn;
}
+ trace_argv_printf(&argv.v[1], "trace: prepare_cmd:");

if (pipe(notify_pipe))
notify_pipe[0] = notify_pipe[1] = -1;
@@ -914,6 +913,7 @@ int start_command(struct child_process *cmd)
cmd->args.v = prepare_git_cmd(&nargv, sargv);
else if (cmd->use_shell)
cmd->args.v = prepare_shell_cmd(&nargv, sargv);
+ trace_argv_printf(&cmd->args.v[1], "trace: prepare_cmd:");

cmd->pid = mingw_spawnvpe(cmd->args.v[0], cmd->args.v,
(char**) cmd->env.v,