Browse Source

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>
maint
Rohit Ashiwal 5 years ago committed by Junio C Hamano
parent
commit
6a1f9046a4
  1. 2
      Documentation/config/advice.txt
  2. 2
      advice.c
  3. 1
      advice.h
  4. 35
      sequencer.c

2
Documentation/config/advice.txt

@ -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

2
advice.c

@ -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 },

1
advice.h

@ -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;

35
sequencer.c

@ -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"));

Loading…
Cancel
Save