Avoid calling die; return error instead. Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> --- advice.c | 14 ++++++++++++++ advice.h | 1 + builtin/revert.c | 40 ++++++++++++++++++---------------------- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/advice.c b/advice.c index 0be4b5f..3c3c187 100644 --- a/advice.c +++ b/advice.c @@ -47,3 +47,17 @@ void NORETURN die_resolve_conflict(const char *me) else die("'%s' is not possible because you have unmerged files.", me); } + +int error_resolve_conflict(const char *me) +{ + if (advice_resolve_conflict) + /* + * Message used both when 'git commit' fails and when + * other commands doing a merge do. + */ + return error("'%s' is not possible because you have unmerged files.\n" + "Please, fix them up in the work tree, and then use 'git add/rm <file>' as\n" + "appropriate to mark resolution and make a commit, or use 'git commit -a'.", me); + else + return error("'%s' is not possible because you have unmerged files.", me); +} diff --git a/advice.h b/advice.h index 3244ebb..7b7cea5 100644 --- a/advice.h +++ b/advice.h @@ -13,5 +13,6 @@ extern int advice_detached_head; int git_default_advice_config(const char *var, const char *value); extern void NORETURN die_resolve_conflict(const char *me); +extern int error_resolve_conflict(const char *me); #endif /* ADVICE_H */ diff --git a/builtin/revert.c b/builtin/revert.c index b90f3d0..e0352d4 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -344,25 +344,20 @@ static struct tree *empty_tree(void) return tree; } -static int error_dirty_index() +static int verify_resolution(const char *me) { - if (read_cache_unmerged()) { - die_resolve_conflict(cmd_opts.action == REVERT ? "revert" : "cherry-pick"); - } else { - if (advice_commit_before_merge) { - if (cmd_opts.action == REVERT) - return error(_("Your local changes would be overwritten by revert.\n" - "Please, commit your changes or stash them to proceed.")); - else - return error(_("Your local changes would be overwritten by cherry-pick.\n" - "Please, commit your changes or stash them to proceed.")); - } else { - if (cmd_opts.action == REVERT) - return error(_("Your local changes would be overwritten by revert.\n")); - else - return error(_("Your local changes would be overwritten by cherry-pick.\n")); - } - } + if (!read_cache_unmerged()) + return 0; + + return error_resolve_conflict(me); +} + +static int error_dirty_worktree(const char *me) +{ + if (advice_commit_before_merge) + return error(_("Your local changes would be overwritten by %s.\n" + "Please, commit your changes or stash them to proceed."), me); + return error(_("Your local changes would be overwritten by %s.\n"), me); } static int fast_forward_to(const unsigned char *to, const unsigned char *from) @@ -467,8 +462,10 @@ static int do_pick_commit(struct commit *commit) struct commit_message msg = { NULL, NULL, NULL, NULL, NULL }; char *defmsg = NULL; struct strbuf msgbuf = STRBUF_INIT; + const char *me; int res; + me = (cmd_opts.action == REVERT ? "revert" : "cherry-pick"); if (cmd_opts.no_commit) { /* * We do not intend to commit immediately. We just want to @@ -481,8 +478,8 @@ static int do_pick_commit(struct commit *commit) } else { if (get_sha1("HEAD", head)) return error(_("You do not have a valid HEAD")); - if (index_differs_from("HEAD", 0)) - return error_dirty_index(); + if (index_differs_from("HEAD", 0) && !verify_resolution(me)) + return error_dirty_worktree(me); } discard_cache(); @@ -521,8 +518,7 @@ static int do_pick_commit(struct commit *commit) /* TRANSLATORS: The first %s will be "revert" or "cherry-pick", the second %s a SHA1 */ return error(_("%s: cannot parse parent commit %s"), - cmd_opts.action == REVERT ? "revert" : "cherry-pick", - sha1_to_hex(parent->object.sha1)); + me, sha1_to_hex(parent->object.sha1)); if (get_message(commit, commit->buffer, &msg) != 0) return error(_("Cannot get commit message for %s"), -- 1.7.4.rc1.7.g2cf08.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