This is in preparation for adding mark reference capability to path names. Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> --- fast-import.c | 60 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 32 insertions(+), 28 deletions(-) diff --git a/fast-import.c b/fast-import.c index 7ef9865..8a7cdc1 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1853,6 +1853,24 @@ static void load_branch(struct branch *b) } } +static const char *get_path_str( + struct strbuf *sb, + const char *p, + char endc, + const char **endp) +{ + strbuf_reset(sb); + *endp = p; + if (!unquote_c_style(sb, p, endp)) { + /* successfully unquoted C-style quoted name */ + p = sb->buf; + } else { + /* regular path ending at endc */ + *endp = strchr(p, endc); + } + return p; +} + static void file_change_m(struct branch *b) { const char *p = command_buf.buf + 2; @@ -1896,12 +1914,9 @@ static void file_change_m(struct branch *b) if (*p++ != ' ') die("Missing space after SHA1: %s", command_buf.buf); - strbuf_reset(&uq); - if (!unquote_c_style(&uq, p, &endp)) { - if (*endp) - die("Garbage after path in: %s", command_buf.buf); - p = uq.buf; - } + p = get_path_str(&uq, p, 0, &endp); + if (*endp) + die("Garbage after path in: %s", command_buf.buf); if (S_ISGITLINK(mode)) { if (inline_data) @@ -1948,12 +1963,9 @@ static void file_change_d(struct branch *b) static struct strbuf uq = STRBUF_INIT; const char *endp; - strbuf_reset(&uq); - if (!unquote_c_style(&uq, p, &endp)) { - if (*endp) - die("Garbage after path in: %s", command_buf.buf); - p = uq.buf; - } + p = get_path_str(&uq, p, 0, &endp); + if (*endp) + die("Garbage after path in: %s", command_buf.buf); tree_content_remove(&b->branch_tree, p, NULL); } @@ -1966,29 +1978,21 @@ static void file_change_cr(struct branch *b, int rename) struct tree_entry leaf; s = command_buf.buf + 2; - strbuf_reset(&s_uq); - if (!unquote_c_style(&s_uq, s, &endp)) { - if (*endp != ' ') - die("Missing space after source: %s", command_buf.buf); - } else { - endp = strchr(s, ' '); - if (!endp) - die("Missing space after source: %s", command_buf.buf); + s = get_path_str(&s_uq, s, ' ', &endp); + if (*endp != ' ') + die("Missing space after source: %s", command_buf.buf); + if (s != s_uq.buf) { strbuf_add(&s_uq, s, endp - s); + s = s_uq.buf; } - s = s_uq.buf; endp++; if (!*endp) die("Missing dest: %s", command_buf.buf); - d = endp; - strbuf_reset(&d_uq); - if (!unquote_c_style(&d_uq, d, &endp)) { - if (*endp) - die("Garbage after dest in: %s", command_buf.buf); - d = d_uq.buf; - } + d = get_path_str(&d_uq, endp, 0, &endp); + if (*endp) + die("Garbage after dest in: %s", command_buf.buf); memset(&leaf, 0, sizeof(leaf)); if (rename) -- 1.6.4.rc3.138.ga6b98.dirty -- 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