rebase: introduce a shortcut for --reschedule-failed-exec
It is a bit cumbersome to write out the `--reschedule-failed-exec` option before `-x <cmd>` all the time; let's introduce a convenient option to do both at the same time: `-y <cmd>`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
969de3ff0e
commit
81ef8ee75d
@ -462,6 +462,12 @@ without an explicit `--interactive`.
|
|||||||
+
|
+
|
||||||
See also INCOMPATIBLE OPTIONS below.
|
See also INCOMPATIBLE OPTIONS below.
|
||||||
|
|
||||||
|
-y <cmd>::
|
||||||
|
This is the same as passing `--reschedule-failed-exec` before
|
||||||
|
`-x <cmd>`, i.e. it appends the specified `exec` command and
|
||||||
|
turns on the mode where failed `exec` commands are automatically
|
||||||
|
rescheduled.
|
||||||
|
|
||||||
--root::
|
--root::
|
||||||
Rebase all commits reachable from <branch>, instead of
|
Rebase all commits reachable from <branch>, instead of
|
||||||
limiting them with an <upstream>. This allows you to rebase
|
limiting them with an <upstream>. This allows you to rebase
|
||||||
|
@ -754,6 +754,23 @@ static int parse_opt_interactive(const struct option *opt, const char *arg,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct opt_y {
|
||||||
|
struct string_list *list;
|
||||||
|
struct rebase_options *options;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int parse_opt_y(const struct option *opt, const char *arg, int unset)
|
||||||
|
{
|
||||||
|
struct opt_y *o = opt->value;
|
||||||
|
|
||||||
|
if (unset || !arg)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
o->options->reschedule_failed_exec = 1;
|
||||||
|
string_list_append(o->list, arg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void NORETURN error_on_missing_default_upstream(void)
|
static void NORETURN error_on_missing_default_upstream(void)
|
||||||
{
|
{
|
||||||
struct branch *current_branch = branch_get(NULL);
|
struct branch *current_branch = branch_get(NULL);
|
||||||
@ -834,6 +851,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
|||||||
struct string_list strategy_options = STRING_LIST_INIT_NODUP;
|
struct string_list strategy_options = STRING_LIST_INIT_NODUP;
|
||||||
struct object_id squash_onto;
|
struct object_id squash_onto;
|
||||||
char *squash_onto_name = NULL;
|
char *squash_onto_name = NULL;
|
||||||
|
struct opt_y opt_y = { .list = &exec, .options = &options };
|
||||||
struct option builtin_rebase_options[] = {
|
struct option builtin_rebase_options[] = {
|
||||||
OPT_STRING(0, "onto", &options.onto_name,
|
OPT_STRING(0, "onto", &options.onto_name,
|
||||||
N_("revision"),
|
N_("revision"),
|
||||||
@ -911,6 +929,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
|||||||
OPT_STRING_LIST('x', "exec", &exec, N_("exec"),
|
OPT_STRING_LIST('x', "exec", &exec, N_("exec"),
|
||||||
N_("add exec lines after each commit of the "
|
N_("add exec lines after each commit of the "
|
||||||
"editable list")),
|
"editable list")),
|
||||||
|
{ OPTION_CALLBACK, 'y', NULL, &opt_y, N_("<cmd>"),
|
||||||
|
N_("same as --reschedule-failed-exec -x <cmd>"),
|
||||||
|
PARSE_OPT_NONEG, parse_opt_y },
|
||||||
OPT_BOOL(0, "allow-empty-message",
|
OPT_BOOL(0, "allow-empty-message",
|
||||||
&options.allow_empty_message,
|
&options.allow_empty_message,
|
||||||
N_("allow rebasing commits with empty messages")),
|
N_("allow rebasing commits with empty messages")),
|
||||||
|
@ -26,6 +26,7 @@ f,force-rebase! cherry-pick all commits, even if unchanged
|
|||||||
m,merge! use merging strategies to rebase
|
m,merge! use merging strategies to rebase
|
||||||
i,interactive! let the user edit the list of commits to rebase
|
i,interactive! let the user edit the list of commits to rebase
|
||||||
x,exec=! add exec lines after each commit of the editable list
|
x,exec=! add exec lines after each commit of the editable list
|
||||||
|
y=! same as --reschedule-failed-exec -x
|
||||||
k,keep-empty preserve empty commits during rebase
|
k,keep-empty preserve empty commits during rebase
|
||||||
allow-empty-message allow rebasing commits with empty messages
|
allow-empty-message allow rebasing commits with empty messages
|
||||||
stat! display a diffstat of what changed upstream
|
stat! display a diffstat of what changed upstream
|
||||||
@ -262,6 +263,11 @@ do
|
|||||||
cmd="${cmd}exec ${1#--exec=}${LF}"
|
cmd="${cmd}exec ${1#--exec=}${LF}"
|
||||||
test -z "$interactive_rebase" && interactive_rebase=implied
|
test -z "$interactive_rebase" && interactive_rebase=implied
|
||||||
;;
|
;;
|
||||||
|
-y*)
|
||||||
|
reschedule_failed_exec=--reschedule-failed-exec
|
||||||
|
cmd="${cmd}exec ${1#-y}${LF}"
|
||||||
|
test -z "$interactive_rebase" && interactive_rebase=implied
|
||||||
|
;;
|
||||||
--interactive)
|
--interactive)
|
||||||
interactive_rebase=explicit
|
interactive_rebase=explicit
|
||||||
;;
|
;;
|
||||||
|
@ -262,6 +262,9 @@ test_expect_success '--reschedule-failed-exec' '
|
|||||||
test_must_fail git -c rebase.rescheduleFailedExec=true \
|
test_must_fail git -c rebase.rescheduleFailedExec=true \
|
||||||
rebase -x false HEAD^ 2>err &&
|
rebase -x false HEAD^ 2>err &&
|
||||||
grep "^exec false" .git/rebase-merge/git-rebase-todo &&
|
grep "^exec false" .git/rebase-merge/git-rebase-todo &&
|
||||||
|
test_i18ngrep "has been rescheduled" err &&
|
||||||
|
git rebase --abort &&
|
||||||
|
test_must_fail git rebase -y false HEAD^ 2>err &&
|
||||||
test_i18ngrep "has been rescheduled" err
|
test_i18ngrep "has been rescheduled" err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user