quote: add sq_append_quote_argv_pretty()

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>

Jeff Hostetler committed Aug 9, 2019 at 08:00 UTC c2b890aca50885ce7503dfe4bdae4ac83bbb2331
2 files changed +18 -1
quote.c
+17 -1
@@ -84,12 +84,28 @@ void sq_quote_argv(struct strbuf *dst, const char **argv)
84 }
85 }
86
87 +/*
88 + * Legacy function to append each argv value, quoted as necessasry,
89 + * with whitespace before each value. This results in a leading
90 + * space in the result.
91 + */
92 void sq_quote_argv_pretty(struct strbuf *dst, const char **argv)
93 +{
94 + if (argv[0])
95 + strbuf_addch(dst, ' ');
96 + sq_append_quote_argv_pretty(dst, argv);
97 +}
98 +
99 +/*
100 + * Append each argv value, quoted as necessary, with whitespace between them.
101 + */
102 +void sq_append_quote_argv_pretty(struct strbuf *dst, const char **argv)
103 {
104 int i;
105
106 for (i = 0; argv[i]; i++) {
92 - strbuf_addch(dst, ' ');
107 + if (i > 0)
108 + strbuf_addch(dst, ' ');
109 sq_quote_buf_pretty(dst, argv[i]);
110 }
111 }
quote.h
+1
@@ -40,6 +40,7 @@ void sq_quotef(struct strbuf *, const char *fmt, ...);
40 */
41 void sq_quote_buf_pretty(struct strbuf *, const char *src);
42 void sq_quote_argv_pretty(struct strbuf *, const char **argv);
43 +void sq_append_quote_argv_pretty(struct strbuf *dst, const char **argv);
44
45 /* This unwraps what sq_quote() produces in place, but returns
46 * NULL if the input does not look like what sq_quote would have