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::
Automatically reschedule `exec` commands that failed. This only makes
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
--------------------

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_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_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_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()))
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()))
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", "");
if (opts->reschedule_failed_exec)
write_file(rebase_path_reschedule_failed_exec(), "%s", "");
else
write_file(rebase_path_no_reschedule_failed_exec(), "%s", "");
return 0;
}

View file

@ -282,12 +282,35 @@ test_expect_success '--reschedule-failed-exec' '
test_i18ngrep "has been rescheduled" err
'
test_expect_success 'rebase.reschedulefailedexec only affects `rebase -i`' '
test_config rebase.reschedulefailedexec true &&
test_expect_success 'rebase.rescheduleFailedExec only affects `rebase -i`' '
test_config rebase.rescheduleFailedExec true &&
test_must_fail git rebase -x false HEAD^ &&
grep "^exec false" .git/rebase-merge/git-rebase-todo &&
git rebase --abort &&
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