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 <p...@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"
 "    git commit --allow-empty\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"
-"Otherwise, please use 'git reset'\n");
+"    git reset && git cherry-pick --continue\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;
+       }
                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;

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to