Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> --- builtin/revert.c | 71 ++++++++++++++++++++++++++++------------------------- 1 files changed, 37 insertions(+), 34 deletions(-) diff --git a/builtin/revert.c b/builtin/revert.c index 2bb13eb..017b1af 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -265,23 +265,23 @@ static struct tree *empty_tree(void) return tree; } -static NORETURN void die_dirty_index(const char *me) +static int error_dirty_index(const char *me) { if (read_cache_unmerged()) { die_resolve_conflict(me); } else { if (advice_commit_before_merge) { if (action == REVERT) - die(_("Your local changes would be overwritten by revert.\n" + return error(_("Your local changes would be overwritten by revert.\n" "Please, commit your changes or stash them to proceed.")); else - die(_("Your local changes would be overwritten by cherry-pick.\n" + return error(_("Your local changes would be overwritten by cherry-pick.\n" "Please, commit your changes or stash them to proceed.")); } else { if (action == REVERT) - die(_("Your local changes would be overwritten by revert.\n")); + return error(_("Your local changes would be overwritten by revert.\n")); else - die(_("Your local changes would be overwritten by cherry-pick.\n")); + return error(_("Your local changes would be overwritten by cherry-pick.\n")); } } } @@ -331,7 +331,7 @@ static int do_recursive_merge(struct commit *base, struct commit *next, (write_cache(index_fd, active_cache, active_nr) || commit_locked_index(&index_lock))) /* TRANSLATORS: %s will be "revert" or "cherry-pick" */ - die(_("%s: Unable to write new index file"), me); + return error(_("%s: Unable to write new index file"), me); rollback_lock_file(&index_lock); if (!clean) { @@ -397,18 +397,18 @@ static int do_pick_commit(void) * to work on. */ if (write_cache_as_tree(head, 0, NULL)) - die (_("Your index file is unmerged.")); + return error(_("Your index file is unmerged.")); } else { if (get_sha1("HEAD", head)) - die (_("You do not have a valid HEAD")); + return error(_("You do not have a valid HEAD")); if (index_differs_from("HEAD", 0)) - die_dirty_index(me); + return error_dirty_index(me); } discard_cache(); if (!commit->parents) { if (action == REVERT) - die (_("Cannot revert a root commit")); + return error(_("Cannot revert a root commit")); parent = NULL; } else if (commit->parents->next) { @@ -417,19 +417,19 @@ static int do_pick_commit(void) struct commit_list *p; if (!mainline) - die(_("Commit %s is a merge but no -m option was given."), - sha1_to_hex(commit->object.sha1)); + return error(_("Commit %s is a merge but no -m option was given."), + sha1_to_hex(commit->object.sha1)); for (cnt = 1, p = commit->parents; cnt != mainline && p; cnt++) p = p->next; if (cnt != mainline || !p) - die(_("Commit %s does not have parent %d"), + return error(_("Commit %s does not have parent %d"), sha1_to_hex(commit->object.sha1), mainline); parent = p->item; - } else if (0 < mainline) - die(_("Mainline was specified but commit %s is not a merge."), + } else if (mainline > 0) + return error(_("Mainline was specified but commit %s is not a merge."), sha1_to_hex(commit->object.sha1)); else parent = commit->parents->item; @@ -440,11 +440,11 @@ static int do_pick_commit(void) if (parent && parse_commit(parent) < 0) /* TRANSLATORS: The first %s will be "revert" or "cherry-pick", the second %s a SHA1 */ - die(_("%s: cannot parse parent commit %s"), + return error(_("%s: cannot parse parent commit %s"), me, sha1_to_hex(parent->object.sha1)); if (get_message(commit->buffer, &msg) != 0) - die(_("Cannot get commit message for %s"), + return error(_("Cannot get commit message for %s"), sha1_to_hex(commit->object.sha1)); /* @@ -523,7 +523,7 @@ static int do_pick_commit(void) return res; } -static void prepare_revs(struct rev_info *revs) +static int prepare_revs(struct rev_info *revs) { int argc; @@ -533,34 +533,39 @@ static void prepare_revs(struct rev_info *revs) revs->reverse = 1; argc = setup_revisions(commit_argc, commit_argv, revs, NULL); - if (argc > 1) - usage(*revert_or_cherry_pick_usage()); + if (argc > 1) { + fprintf(stderr, "usage: %s", _(*revert_or_cherry_pick_usage())); + return 129; + } if (prepare_revision_walk(revs)) - die(_("revision walk setup failed")); + return error(_("revision walk setup failed")); if (!revs->commits) - die(_("empty commit set passed")); + return error(_("empty commit set passed")); + return 0; } -static void read_and_refresh_cache(const char *me) +static int read_and_refresh_cache(const char *me) { static struct lock_file index_lock; int index_fd = hold_locked_index(&index_lock, 0); if (read_index_preload(&the_index, NULL) < 0) - die(_("git %s: failed to read the index"), me); + return error(_("%s: failed to read the index"), me); refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL); if (the_index.cache_changed) { if (write_index(&the_index, index_fd) || commit_locked_index(&index_lock)) - die(_("git %s: failed to refresh the index"), me); + return error(_("%s: failed to refresh the index"), me); } rollback_lock_file(&index_lock); + return 0; } static int revert_or_cherry_pick(int argc, const char **argv) { struct rev_info revs; + int res; git_config(git_default_config, NULL); me = action == REVERT ? "revert" : "cherry-pick"; @@ -578,17 +583,15 @@ static int revert_or_cherry_pick(int argc, const char **argv) die(_("cherry-pick --ff cannot be used with --edit")); } - read_and_refresh_cache(me); + if ((res = read_and_refresh_cache(me)) || + (res = prepare_revs(&revs))) + return res; - prepare_revs(&revs); + while ((commit = get_revision(&revs)) && + !(res = do_pick_commit(commit))) + ; - while ((commit = get_revision(&revs))) { - int res = do_pick_commit(); - if (res) - return res; - } - - return 0; + return res; } int cmd_revert(int argc, const char **argv, const char *prefix) -- 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