This is the same as the old code that uses trace_argv_printf() in run-command.c. This function will be improved in later patches to print more information from struct child_process. A slight regression: the old code would print run-command.c:xxx as the trace location site while the new code prints trace.c:xxx. This should be fine until the second call site is added, then we might need a macro wrapper named trace_run_command() to capture the right source location. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- run-command.c | 3 ++- trace.c | 16 ++++++++++++++++ trace.h | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/run-command.c b/run-command.c index 31fc5ea86e..002074b128 100644 --- a/run-command.c +++ b/run-command.c @@ -624,7 +624,8 @@ int start_command(struct child_process *cmd) cmd->err = fderr[0]; } - trace_argv_printf(cmd->argv, "trace: run_command:"); + trace_run_command(cmd); + fflush(NULL); #ifndef GIT_WINDOWS_NATIVE diff --git a/trace.c b/trace.c index 7f3b08e148..da3db301e7 100644 --- a/trace.c +++ b/trace.c @@ -23,6 +23,7 @@ #include "cache.h" #include "quote.h" +#include "run-command.h" struct trace_key trace_default_key = { "GIT_TRACE", 0, 0, 0 }; struct trace_key trace_perf_key = TRACE_KEY_INIT(PERFORMANCE); @@ -275,6 +276,21 @@ void trace_performance_fl(const char *file, int line, uint64_t nanos, #endif /* HAVE_VARIADIC_MACROS */ +void trace_run_command(const struct child_process *cp) +{ + struct strbuf buf = STRBUF_INIT; + + if (!prepare_trace_line(__FILE__, __LINE__, + &trace_default_key, &buf)) + return; + + strbuf_addf(&buf, "trace: run_command:"); + + sq_quote_argv_pretty(&buf, cp->argv); + print_trace_line(&trace_default_key, &buf); + strbuf_release(&buf); +} + static const char *quote_crnl(const char *path) { static struct strbuf new_path = STRBUF_INIT; diff --git a/trace.h b/trace.h index 88055abef7..e54c687f26 100644 --- a/trace.h +++ b/trace.h @@ -4,6 +4,8 @@ #include "git-compat-util.h" #include "strbuf.h" +struct child_process; + struct trace_key { const char * const key; int fd; @@ -17,6 +19,7 @@ extern struct trace_key trace_default_key; extern struct trace_key trace_perf_key; extern void trace_repo_setup(const char *prefix); +extern void trace_run_command(const struct child_process *cp); extern int trace_want(struct trace_key *key); extern void trace_disable(struct trace_key *key); extern uint64_t getnanotime(void); -- 2.15.1.600.g899a5f85c6