]> git.ipfire.org Git - thirdparty/git.git/commitdiff
quote_path: optionally allow quoting a path with SP in it
authorJunio C Hamano <gitster@pobox.com>
Thu, 10 Sep 2020 17:01:55 +0000 (10:01 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Sep 2020 17:49:20 +0000 (10:49 -0700)
Some code in wt-status.c special case a path with SP in it, which
usually does not have to be c-quoted, and ensure that such a path
does get quoted.  Move the logic to quote_path() and give it a bit
in the flags word, QUOTE_PATH_QUOTE_SP.

No behaviour change intended.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
quote.c
quote.h
wt-status.c

diff --git a/quote.c b/quote.c
index a86f9f22a2407c4d9e66a65905f2803436eeb4ea..aa9a37b1b1076fdd595bbfdecdf62bd208ce3eba 100644 (file)
--- a/quote.c
+++ b/quote.c
@@ -360,6 +360,13 @@ char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigne
        quote_c_style_counted(rel, strlen(rel), out, NULL, 0);
        strbuf_release(&sb);
 
+       if ((flags & QUOTE_PATH_QUOTE_SP) &&
+           (out->buf[0] != '"' && strchr(out->buf, ' '))) {
+               /* Ensure the whole thing is quoted if the path has SP in it */
+               strbuf_insertstr(out, 0, "\"");
+               strbuf_addch(out, '"');
+       }
+
        return out->buf;
 }
 
diff --git a/quote.h b/quote.h
index 4687b5daf491e47945d8eb627952aa79ef0803ec..1918d1e00ec7d595082b5c9cda2640257c2b7ba2 100644 (file)
--- a/quote.h
+++ b/quote.h
@@ -73,6 +73,7 @@ void write_name_quoted_relative(const char *name, const char *prefix,
 
 /* quote path as relative to the given prefix */
 char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigned flags);
+#define QUOTE_PATH_QUOTE_SP 01
 
 /* quoting as a string literal for other languages */
 void perl_quote_buf(struct strbuf *sb, const char *src);
index d6ca7bd52c03b0ee696b8832f6a292d771b77f5d..adbf6958bd75eda3aee4e735841ce86df432b2b6 100644 (file)
@@ -1877,21 +1877,12 @@ static void wt_shortstatus_status(struct string_list_item *it,
                const char *one;
 
                if (d->rename_source) {
-                       one = quote_path(d->rename_source, s->prefix, &onebuf, 0);
-                       if (*one != '"' && strchr(one, ' ') != NULL) {
-                               putchar('"');
-                               strbuf_addch(&onebuf, '"');
-                               one = onebuf.buf;
-                       }
+                       one = quote_path(d->rename_source, s->prefix, &onebuf,
+                                        QUOTE_PATH_QUOTE_SP);
                        printf("%s -> ", one);
                        strbuf_release(&onebuf);
                }
-               one = quote_path(it->string, s->prefix, &onebuf, 0);
-               if (*one != '"' && strchr(one, ' ') != NULL) {
-                       putchar('"');
-                       strbuf_addch(&onebuf, '"');
-                       one = onebuf.buf;
-               }
+               one = quote_path(it->string, s->prefix, &onebuf, QUOTE_PATH_QUOTE_SP);
                printf("%s\n", one);
                strbuf_release(&onebuf);
        }