sequencer: add advice for revert

In the case of merge conflicts, while performing a revert, we are
currently advised to use `git cherry-pick --<sequencer-options>`.
Introduce a separate advice message for `git revert`. Also change
the signature of `create_seq_dir` to handle which advice to display
selectively.

Signed-off-by: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Rohit Ashiwal
2019-07-02 14:41:25 +05:30
committed by Junio C Hamano
parent a6a95cd1b4
commit 6a1f9046a4
4 changed files with 34 additions and 6 deletions

View File

@ -57,6 +57,8 @@ advice.*::
resolveConflict:: resolveConflict::
Advice shown by various commands when conflicts Advice shown by various commands when conflicts
prevent the operation from being performed. prevent the operation from being performed.
sequencerInUse::
Advice shown when a sequencer command is already in progress.
implicitIdentity:: implicitIdentity::
Advice on how to set your identity configuration when Advice on how to set your identity configuration when
your information is guessed from the system username and your information is guessed from the system username and

View File

@ -15,6 +15,7 @@ int advice_status_u_option = 1;
int advice_commit_before_merge = 1; int advice_commit_before_merge = 1;
int advice_reset_quiet_warning = 1; int advice_reset_quiet_warning = 1;
int advice_resolve_conflict = 1; int advice_resolve_conflict = 1;
int advice_sequencer_in_use = 1;
int advice_implicit_identity = 1; int advice_implicit_identity = 1;
int advice_detached_head = 1; int advice_detached_head = 1;
int advice_set_upstream_failure = 1; int advice_set_upstream_failure = 1;
@ -71,6 +72,7 @@ static struct {
{ "commitBeforeMerge", &advice_commit_before_merge }, { "commitBeforeMerge", &advice_commit_before_merge },
{ "resetQuiet", &advice_reset_quiet_warning }, { "resetQuiet", &advice_reset_quiet_warning },
{ "resolveConflict", &advice_resolve_conflict }, { "resolveConflict", &advice_resolve_conflict },
{ "sequencerInUse", &advice_sequencer_in_use },
{ "implicitIdentity", &advice_implicit_identity }, { "implicitIdentity", &advice_implicit_identity },
{ "detachedHead", &advice_detached_head }, { "detachedHead", &advice_detached_head },
{ "setupStreamFailure", &advice_set_upstream_failure }, { "setupStreamFailure", &advice_set_upstream_failure },

View File

@ -15,6 +15,7 @@ extern int advice_status_u_option;
extern int advice_commit_before_merge; extern int advice_commit_before_merge;
extern int advice_reset_quiet_warning; extern int advice_reset_quiet_warning;
extern int advice_resolve_conflict; extern int advice_resolve_conflict;
extern int advice_sequencer_in_use;
extern int advice_implicit_identity; extern int advice_implicit_identity;
extern int advice_detached_head; extern int advice_detached_head;
extern int advice_set_upstream_failure; extern int advice_set_upstream_failure;

View File

@ -2650,15 +2650,38 @@ static int walk_revs_populate_todo(struct todo_list *todo_list,
return 0; return 0;
} }
static int create_seq_dir(void) static int create_seq_dir(struct repository *r)
{ {
if (file_exists(git_path_seq_dir())) { enum replay_action action;
error(_("a cherry-pick or revert is already in progress")); const char *in_progress_error = NULL;
advise(_("try \"git cherry-pick (--continue | --quit | --abort)\"")); const char *in_progress_advice = NULL;
if (!sequencer_get_last_command(r, &action)) {
switch (action) {
case REPLAY_REVERT:
in_progress_error = _("revert is already in progress");
in_progress_advice =
_("try \"git revert (--continue | --abort | --quit)\"");
break;
case REPLAY_PICK:
in_progress_error = _("cherry-pick is already in progress");
in_progress_advice =
_("try \"git cherry-pick (--continue | --abort | --quit)\"");
break;
default:
BUG("unexpected action in create_seq_dir");
}
}
if (in_progress_error) {
error("%s", in_progress_error);
if (advice_sequencer_in_use)
advise("%s", in_progress_advice);
return -1; return -1;
} else if (mkdir(git_path_seq_dir(), 0777) < 0) }
if (mkdir(git_path_seq_dir(), 0777) < 0)
return error_errno(_("could not create sequencer directory '%s'"), return error_errno(_("could not create sequencer directory '%s'"),
git_path_seq_dir()); git_path_seq_dir());
return 0; return 0;
} }
@ -4242,7 +4265,7 @@ int sequencer_pick_revisions(struct repository *r,
*/ */
if (walk_revs_populate_todo(&todo_list, opts) || if (walk_revs_populate_todo(&todo_list, opts) ||
create_seq_dir() < 0) create_seq_dir(r) < 0)
return -1; return -1;
if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT)) if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
return error(_("can't revert as initial commit")); return error(_("can't revert as initial commit"));