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 <bl...@dcon.de>
Signed-off-by: Junio C Hamano <gits...@pobox.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to