Opening and writing to the trace file is currently duplicated in trace_strbuf() and trace_argv_printf(). Factor out this logic to prepare for adding timestamp and file:line to trace output. In case of trace_argv_printf(), this adds an additional trace_want() check to prevent unnecessary string formatting. Signed-off-by: Karsten Blees <blees@xxxxxxx> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- trace.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/trace.c b/trace.c index 3e31558..b7ca51b 100644 --- a/trace.c +++ b/trace.c @@ -62,6 +62,21 @@ static int get_trace_fd(const char *key, int *need_close) static const char err_msg[] = "Could not trace into fd given by " "GIT_TRACE environment variable"; +/* Print 'buf' verbatim to trace file designated by env var 'key' */ +static void do_trace_print(const char *key, const struct strbuf *buf) +{ + int fd, need_close = 0; + + fd = get_trace_fd(key, &need_close); + if (!fd) + return; + + write_or_whine_pipe(fd, buf->buf, buf->len, err_msg); + + if (need_close) + close(fd); +} + static void trace_vprintf(const char *key, const char *format, va_list ap) { struct strbuf buf = STRBUF_INIT; @@ -71,7 +86,7 @@ static void trace_vprintf(const char *key, const char *format, va_list ap) set_try_to_free_routine(NULL); /* is never reset */ strbuf_vaddf(&buf, format, ap); - trace_strbuf(key, &buf); + do_trace_print(key, &buf); strbuf_release(&buf); } @@ -93,26 +108,15 @@ void trace_printf(const char *format, ...) void trace_strbuf(const char *key, const struct strbuf *buf) { - int fd, need_close = 0; - - fd = get_trace_fd(key, &need_close); - if (!fd) - return; - - write_or_whine_pipe(fd, buf->buf, buf->len, err_msg); - - if (need_close) - close(fd); + do_trace_print(key, buf); } void trace_argv_printf(const char **argv, const char *format, ...) { struct strbuf buf = STRBUF_INIT; va_list ap; - int fd, need_close = 0; - fd = get_trace_fd("GIT_TRACE", &need_close); - if (!fd) + if (!trace_want("GIT_TRACE")) return; set_try_to_free_routine(NULL); /* is never reset */ @@ -122,11 +126,8 @@ void trace_argv_printf(const char **argv, const char *format, ...) sq_quote_argv(&buf, argv, 0); strbuf_addch(&buf, '\n'); - write_or_whine_pipe(fd, buf.buf, buf.len, err_msg); + do_trace_print("GIT_TRACE", &buf); strbuf_release(&buf); - - if (need_close) - close(fd); } static const char *quote_crnl(const char *path) -- 2.0.0.402.g13b8b25 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html