Re: [PATCH] commit: correct advice about aborting a cherry-pick
- From
Jeff King <peff@peff.net>
- Date
- Jul 26, 2013, 23:05 UTC
- Message-ID
- <20130726230527.GA12968@sigill.intra.peff.net>
- In-Reply-To
- <20130726224359.GA3928@sigill.intra.peff.net>
On Fri, Jul 26, 2013 at 06:43:59PM -0400, Jeff King wrote:
> I think instead we would want to leave the single-commit case alone, and > for the multi-commit case add "...and then cherry-pick --continue". That > message is generated from within git-commit, though; I guess it would > need to learn about the difference between single/multi cherry-picks.
Like this?
-- >8 -- Subject: [PATCH] commit: tweak empty cherry pick advice for sequencer
When we refuse to make an empty commit, we check whether we are in a cherry-pick in order to give better advice on how to proceed. We instruct the user to repeat the commit with "--allow-empty" to force the commit, or to use "git reset" to skip it and abort the cherry-pick.
This works fine when we are cherry-picking a single commit. When we are using the sequencer to cherry-pick multiple items, though, using "git reset" is not good advice. It does not skip the commit (you must run "cherry-pick --continue" to keep going), but nor does it abort the cherry-pick (the .sequencer directory still exists).
Let's teach commit to tell when the sequencer is in use, and to mention "cherry-pick --continue" in that case.
Signed-off-by: Jeff King <peff@peff.net> --- The advice in the multi case could eventually change to "cherry-pick --skip" if and when it exists.
builtin/commit.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/builtin/commit.c b/builtin/commit.c index e47f100..45a98d7 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -63,8 +63,14 @@ N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\ "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" +"\n"); +static const char empty_cherry_pick_advice_skip_single[] = +N_("Otherwise, please use 'git reset'\n"); +static const char empty_cherry_pick_advice_skip_multi[] = +N_("If you wish to skip this commit, use:\n" "\n" -"Otherwise, please use 'git reset'\n"); +" git reset && git cherry-pick --continue\n" +"\n"); static const char *use_message_buffer; static const char commit_editmsg[] = "COMMIT_EDITMSG"; @@ -107,6 +113,7 @@ static enum commit_whence whence; static const char *cleanup_arg; static enum commit_whence whence; +static int sequencer_in_use; static int use_editor = 1, include_status = 1; static int show_ignored_in_status, have_option_m; static const char *only_include_assumed; @@ -141,8 +148,11 @@ static void determine_whence(struct wt_status *s) { if (file_exists(git_path("MERGE_HEAD"))) whence = FROM_MERGE; - else if (file_exists(git_path("CHERRY_PICK_HEAD"))) + else if (file_exists(git_path("CHERRY_PICK_HEAD"))) { whence = FROM_CHERRY_PICK; + if (file_exists(git_path("sequencer"))) + sequencer_in_use = 1; + } else whence = FROM_COMMIT; if (s) @@ -808,8 +818,15 @@ static int prepare_to_commit(const char *index_file, const char *prefix, run_status(stdout, index_file, prefix, 0, s); if (amend) fputs(_(empty_amend_advice), stderr); - else if (whence == FROM_CHERRY_PICK) + else if (whence == FROM_CHERRY_PICK) { fputs(_(empty_cherry_pick_advice), stderr); + if (!sequencer_in_use) + fputs(_(empty_cherry_pick_advice_skip_single), + stderr); + else + fputs(_(empty_cherry_pick_advice_skip_multi), + stderr); + } return 0; }
-- 1.8.3.rc1.30.gff0fb75