rebase: add a config option to default to --reschedule-failed-exec
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 10 Dec 2018 19:04:59 +0000 (11:04 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Dec 2018 08:19:01 +0000 (17:19 +0900)
It would be cumbersome to type out that option all the time, so let's
offer the convenience of a config setting: rebase.rescheduleFailedExec.

Besides, this opens the door to changing the default in a future version
of Git: it does make some sense to reschedule failed `exec` commands by
default (and if we could go back in time when the `exec` command was
invented, we probably would change that default right from the start).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/rebase.txt
builtin/rebase.c
git-legacy-rebase.sh
t/t3418-rebase-continue.sh
index f079bf6b7e5d88e012074a223a785f8de5949f78..331d250e0468df8ec51bdb3348d6a30274da26ed 100644 (file)
@@ -64,3 +64,8 @@ instead of:
 -------------------------------------------
 +
 Defaults to false.
+
+rebase.rescheduleFailedExec::
+       Automatically reschedule `exec` commands that failed. This only makes
+       sense in interactive mode (or when an `--exec` option was provided).
+       This is the same as specifying the `--reschedule-failed-exec` option.
index cc33730743a6682ada58ecbddc466b81c22745f6..4839e525558bfea819d710cc40ab483eb80fcdf6 100644 (file)
@@ -677,6 +677,11 @@ static int rebase_config(const char *var, const char *value, void *data)
                return 0;
        }
 
+       if (!strcmp(var, "rebase.reschedulefailedexec")) {
+               opts->reschedule_failed_exec = git_config_bool(var, value);
+               return 0;
+       }
+
        return git_default_config(var, value, data);
 }
 
index 699fc4da7e260a6a5bd2c43e9be6a634af9092ca..37db5a7ca4618be80009c7a691c02c6044ce5dd4 100755 (executable)
@@ -99,6 +99,8 @@ case "$(git config --bool commit.gpgsign)" in
 true)  gpg_sign_opt=-S ;;
 *)     gpg_sign_opt= ;;
 esac
+test "$(git config --bool rebase.reschedulefailedexec)" = "true" &&
+reschedule_failed_exec=--reschedule-failed-exec
 . git-rebase--common
 
 read_basic_state () {
index 54b26a928464608ad3a03d995c0b8462b1621f18..bdaa511bb0ae1082568e83781252f667b39cda8a 100755 (executable)
@@ -257,7 +257,12 @@ test_expect_success 'the todo command "break" works' '
 test_expect_success '--reschedule-failed-exec' '
        test_when_finished "git rebase --abort" &&
        test_must_fail git rebase -x false --reschedule-failed-exec HEAD^ &&
-       grep "^exec false" .git/rebase-merge/git-rebase-todo
+       grep "^exec false" .git/rebase-merge/git-rebase-todo &&
+       git rebase --abort &&
+       test_must_fail git -c rebase.rescheduleFailedExec=true \
+               rebase -x false HEAD^ 2>err &&
+       grep "^exec false" .git/rebase-merge/git-rebase-todo &&
+       test_i18ngrep "has been rescheduled" err
 '
 
 test_done