Merge branch 'ab/rebase-no-reschedule-failed-exec'

"git rebase --[no-]reschedule-failed-exec" did not work well with
its configuration variable, which has been corrected.

* ab/rebase-no-reschedule-failed-exec:
  rebase: don't override --no-reschedule-failed-exec with config
  rebase tests: camel-case rebase.rescheduleFailedExec consistently
This commit is contained in:
Junio C Hamano 2021-05-07 12:47:40 +09:00
commit 0377ac98dc
3 changed files with 38 additions and 2 deletions

View file

@ -617,6 +617,14 @@ See also INCOMPATIBLE OPTIONS below.
--no-reschedule-failed-exec:: --no-reschedule-failed-exec::
Automatically reschedule `exec` commands that failed. This only makes Automatically reschedule `exec` commands that failed. This only makes
sense in interactive mode (or when an `--exec` option was provided). sense in interactive mode (or when an `--exec` option was provided).
+
Even though this option applies once a rebase is started, it's set for
the whole rebase at the start based on either the
`rebase.rescheduleFailedExec` configuration (see linkgit:git-config[1]
or "CONFIGURATION" below) or whether this option is
provided. Otherwise an explicit `--no-reschedule-failed-exec` at the
start would be overridden by the presence of
`rebase.rescheduleFailedExec=true` configuration.
INCOMPATIBLE OPTIONS INCOMPATIBLE OPTIONS
-------------------- --------------------

View file

@ -164,6 +164,7 @@ static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts") static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate") static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec") static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
static GIT_PATH_FUNC(rebase_path_no_reschedule_failed_exec, "rebase-merge/no-reschedule-failed-exec")
static GIT_PATH_FUNC(rebase_path_drop_redundant_commits, "rebase-merge/drop_redundant_commits") static GIT_PATH_FUNC(rebase_path_drop_redundant_commits, "rebase-merge/drop_redundant_commits")
static GIT_PATH_FUNC(rebase_path_keep_redundant_commits, "rebase-merge/keep_redundant_commits") static GIT_PATH_FUNC(rebase_path_keep_redundant_commits, "rebase-merge/keep_redundant_commits")
@ -2868,6 +2869,8 @@ static int read_populate_opts(struct replay_opts *opts)
if (file_exists(rebase_path_reschedule_failed_exec())) if (file_exists(rebase_path_reschedule_failed_exec()))
opts->reschedule_failed_exec = 1; opts->reschedule_failed_exec = 1;
else if (file_exists(rebase_path_no_reschedule_failed_exec()))
opts->reschedule_failed_exec = 0;
if (file_exists(rebase_path_drop_redundant_commits())) if (file_exists(rebase_path_drop_redundant_commits()))
opts->drop_redundant_commits = 1; opts->drop_redundant_commits = 1;
@ -2968,6 +2971,8 @@ int write_basic_state(struct replay_opts *opts, const char *head_name,
write_file(rebase_path_ignore_date(), "%s", ""); write_file(rebase_path_ignore_date(), "%s", "");
if (opts->reschedule_failed_exec) if (opts->reschedule_failed_exec)
write_file(rebase_path_reschedule_failed_exec(), "%s", ""); write_file(rebase_path_reschedule_failed_exec(), "%s", "");
else
write_file(rebase_path_no_reschedule_failed_exec(), "%s", "");
return 0; return 0;
} }

View file

@ -282,12 +282,35 @@ test_expect_success '--reschedule-failed-exec' '
test_i18ngrep "has been rescheduled" err test_i18ngrep "has been rescheduled" err
' '
test_expect_success 'rebase.reschedulefailedexec only affects `rebase -i`' ' test_expect_success 'rebase.rescheduleFailedExec only affects `rebase -i`' '
test_config rebase.reschedulefailedexec true && test_config rebase.rescheduleFailedExec true &&
test_must_fail git rebase -x false HEAD^ && test_must_fail git rebase -x false HEAD^ &&
grep "^exec false" .git/rebase-merge/git-rebase-todo && grep "^exec false" .git/rebase-merge/git-rebase-todo &&
git rebase --abort && git rebase --abort &&
git rebase HEAD^ git rebase HEAD^
' '
test_expect_success 'rebase.rescheduleFailedExec=true & --no-reschedule-failed-exec' '
test_when_finished "git rebase --abort" &&
test_config rebase.rescheduleFailedExec true &&
test_must_fail git rebase -x false --no-reschedule-failed-exec HEAD~2 &&
test_must_fail git rebase --continue 2>err &&
! grep "has been rescheduled" err
'
test_expect_success 'new rebase.rescheduleFailedExec=true setting in an ongoing rebase is ignored' '
test_when_finished "git rebase --abort" &&
test_must_fail git rebase -x false HEAD~2 &&
test_config rebase.rescheduleFailedExec true &&
test_must_fail git rebase --continue 2>err &&
! grep "has been rescheduled" err
'
test_expect_success 'there is no --no-reschedule-failed-exec in an ongoing rebase' '
test_when_finished "git rebase --abort" &&
test_must_fail git rebase -x false HEAD~2 &&
test_expect_code 129 git rebase --continue --no-reschedule-failed-exec &&
test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec
'
test_done test_done