quote: add sq_append_quote_argv_pretty()
authorJeff Hostetler <jeffhost@microsoft.com>
Fri, 9 Aug 2019 15:00:55 +0000 (08:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 9 Aug 2019 17:48:02 +0000 (10:48 -0700)
sq_quote_argv_pretty() builds a "pretty" string from the given argv.
It inserts whitespace before each value, rather than just between
them, so the resulting string always has a leading space. Lets give
callers an option to not have the leading space or have to ltrim()
it later.

Create sq_append_quote_argv_pretty() to convert an argv into a
pretty, quoted if necessary, string with space delimiters and
without a leading space.

Convert the existing sq_quote_argv_pretty() to use this new routine
while preserving the leading space behavior.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
quote.c
quote.h
diff --git a/quote.c b/quote.c
index 7f2aa6faa43fed0cd19f23f6fcfdc7b0ebea5c01..c8ba6b397a00036104278a8e55e154079018bb19 100644 (file)
--- a/quote.c
+++ b/quote.c
@@ -84,12 +84,28 @@ void sq_quote_argv(struct strbuf *dst, const char **argv)
        }
 }
 
+/*
+ * Legacy function to append each argv value, quoted as necessasry,
+ * with whitespace before each value.  This results in a leading
+ * space in the result.
+ */
 void sq_quote_argv_pretty(struct strbuf *dst, const char **argv)
+{
+       if (argv[0])
+               strbuf_addch(dst, ' ');
+       sq_append_quote_argv_pretty(dst, argv);
+}
+
+/*
+ * Append each argv value, quoted as necessary, with whitespace between them.
+ */
+void sq_append_quote_argv_pretty(struct strbuf *dst, const char **argv)
 {
        int i;
 
        for (i = 0; argv[i]; i++) {
-               strbuf_addch(dst, ' ');
+               if (i > 0)
+                       strbuf_addch(dst, ' ');
                sq_quote_buf_pretty(dst, argv[i]);
        }
 }
diff --git a/quote.h b/quote.h
index fb08dc085cca25c276cebd79a4cac5b81bd6ad9a..ca8ee3144a6ad2440cce047f7c7afce66f0a8bed 100644 (file)
--- a/quote.h
+++ b/quote.h
@@ -40,6 +40,7 @@ void sq_quotef(struct strbuf *, const char *fmt, ...);
  */
 void sq_quote_buf_pretty(struct strbuf *, const char *src);
 void sq_quote_argv_pretty(struct strbuf *, const char **argv);
+void sq_append_quote_argv_pretty(struct strbuf *dst, const char **argv);
 
 /* This unwraps what sq_quote() produces in place, but returns
  * NULL if the input does not look like what sq_quote would have