Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- unpack-trees.c | 55 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index ad40109..41c5714 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -53,35 +53,46 @@ static const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = { void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, const char *cmd) { - int i; + int i, idx; const char **msgs = opts->msgs; - const char *msg; - char *tmp; - const char *cmd2 = strcmp(cmd, "checkout") ? cmd : "switch branches"; - if (advice_commit_before_merge) - msg = "Your local changes to the following files would be overwritten by %s:\n%%s" - "Please, commit your changes or stash them before you can %s."; + struct strbuf msg = STRBUF_INIT; + const char *overwrite_advice[] = { + "Please, commit your changes or stash them before you can merge.", + "Please, commit your changes or stash them before you can switch branches." + }; + const char *remove_untracked_advice[] = { + "Please move or remove them before you can merge.", + "Please move or remove them before you can switch branches." + }; + + if (!strcmp(cmd, "merge")) + idx = 0; + else if (!strcmp(cmd, "checkout")) + idx = 1; else - msg = "Your local changes to the following files would be overwritten by %s:\n%%s"; - tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen(cmd2) - 2); - sprintf(tmp, msg, cmd, cmd2); - msgs[ERROR_WOULD_OVERWRITE] = tmp; - msgs[ERROR_NOT_UPTODATE_FILE] = tmp; + die("BUG: unsupported command %s", cmd); + + strbuf_addf(&msg, "Your local changes to the following files " + "would be overwritten by %s:\n%%s", cmd); + if (advice_commit_before_merge) + strbuf_addstr(&msg, overwrite_advice[idx]); + msgs[ERROR_WOULD_OVERWRITE] = strbuf_detach(&msg, NULL); + msgs[ERROR_NOT_UPTODATE_FILE] = msgs[ERROR_WOULD_OVERWRITE]; msgs[ERROR_NOT_UPTODATE_DIR] = "Updating the following directories would lose untracked files in it:\n%s"; + strbuf_addf(&msg, "The following untracked working tree " + "files would be removed by %s:\n%%s", cmd); if (advice_commit_before_merge) - msg = "The following untracked working tree files would be %s by %s:\n%%s" - "Please move or remove them before you can %s."; - else - msg = "The following untracked working tree files would be %s by %s:\n%%s"; - tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen("removed") + strlen(cmd2) - 4); - sprintf(tmp, msg, "removed", cmd, cmd2); - msgs[ERROR_WOULD_LOSE_UNTRACKED_REMOVED] = tmp; - tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen("overwritten") + strlen(cmd2) - 4); - sprintf(tmp, msg, "overwritten", cmd, cmd2); - msgs[ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN] = tmp; + strbuf_addstr(&msg, remove_untracked_advice[idx]); + msgs[ERROR_WOULD_LOSE_UNTRACKED_REMOVED] = strbuf_detach(&msg, NULL); + + strbuf_addf(&msg, "The following untracked working tree " + "files would be overwritten by %s:\n%%s", cmd); + if (advice_commit_before_merge) + strbuf_addstr(&msg, remove_untracked_advice[idx]); + msgs[ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN] = strbuf_detach(&msg, NULL); /* * Special case: ERROR_BIND_OVERLAP refers to a pair of paths, we -- 1.7.10.2.549.g9354186 -- 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