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. In the case of a single cherry-pick, the distinction between skipping and aborting is not important, as there is no more work to be done afterwards. When we are using the sequencer to cherry pick a series of commits, though, the instruction is confusing: does it skip this commit, or does it abort the rest of the cherry-pick? It does skip, after which the user can continue the cherry-pick. This is the right thing to be advising the user to do, but let's make it more clear what will happen, both by using the word "skip", and by mentioning that the rest of the sequence can be continued via "cherry-pick --continue" (whether we skip or take the commit). Noticed-by: Ramkumar Ramachandra <artagnon@gmail.com> Helped-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jul 26, 2013 at 19:39 UTC c17592a7a2420a61c4c407f4cf635f196f1254f3
1 file changed +22 -3
builtin/commit.c
+22 -3
@@ -62,8 +62,18 @@ N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\
62 "If you wish to commit it anyway, use:\n"
63 "\n"
64 " git commit --allow-empty\n"
65 +"\n");
66 +
67 +static const char empty_cherry_pick_advice_single[] =
68 +N_("Otherwise, please use 'git reset'\n");
69 +
70 +static const char empty_cherry_pick_advice_multi[] =
71 +N_("If you wish to skip this commit, use:\n"
72 "\n"
66 -"Otherwise, please use 'git reset'\n");
73 +" git reset\n"
74 +"\n"
75 +"Then \"git cherry-pick --continue\" will resume cherry-picking\n"
76 +"the remaining commits.\n");
77
78 static const char *use_message_buffer;
79 static const char commit_editmsg[] = "COMMIT_EDITMSG";
@@ -106,6 +116,7 @@ static enum {
116 static char *cleanup_arg;
117
118 static enum commit_whence whence;
119 +static int sequencer_in_use;
120 static int use_editor = 1, include_status = 1;
121 static int show_ignored_in_status;
122 static const char *only_include_assumed;
@@ -133,8 +144,11 @@ static void determine_whence(struct wt_status *s)
144 {
145 if (file_exists(git_path("MERGE_HEAD")))
146 whence = FROM_MERGE;
136 - else if (file_exists(git_path("CHERRY_PICK_HEAD")))
147 + else if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
148 whence = FROM_CHERRY_PICK;
149 + if (file_exists(git_path("sequencer")))
150 + sequencer_in_use = 1;
151 + }
152 else
153 whence = FROM_COMMIT;
154 if (s)
@@ -799,8 +813,13 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
813 run_status(stdout, index_file, prefix, 0, s);
814 if (amend)
815 fputs(_(empty_amend_advice), stderr);
802 - else if (whence == FROM_CHERRY_PICK)
816 + else if (whence == FROM_CHERRY_PICK) {
817 fputs(_(empty_cherry_pick_advice), stderr);
818 + if (!sequencer_in_use)
819 + fputs(_(empty_cherry_pick_advice_single), stderr);
820 + else
821 + fputs(_(empty_cherry_pick_advice_multi), stderr);
822 + }
823 return 0;
824 }
825