]> Kevux Git Server - rit/commitdiff
rebase -i: fix rewording with --committer-date-is-author-date
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Tue, 2 Nov 2021 21:30:51 +0000 (21:30 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 3 Nov 2021 17:44:45 +0000 (10:44 -0700)
baf8ec8d3a (rebase -r: don't write .git/MERGE_MSG when
fast-forwarding, 2021-08-20) stopped reading the author script in
run_git_commit() when rewording a commit. This is normally safe
because "git commit --amend" preserves the authorship. However if the
user passes "--committer-date-is-author-date" then we need to read the
author date from the author script when rewording. Fix this regression
by tightening the check for when it is safe to skip reading the author
script.

Reported-by: Jonas Kittner <jonas.kittner@ruhr-uni-bochum.de>
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
t/t3436-rebase-more-options.sh

index a19980f..6592eff 100644 (file)
@@ -983,7 +983,9 @@ static int run_git_commit(const char *defmsg,
 
        cmd.git_cmd = 1;
 
-       if (is_rebase_i(opts) && !(!defmsg && (flags & AMEND_MSG)) &&
+       if (is_rebase_i(opts) &&
+           ((opts->committer_date_is_author_date && !opts->ignore_date) ||
+            !(!defmsg && (flags & AMEND_MSG))) &&
            read_env_script(&cmd.env_array)) {
                const char *gpg_opt = gpg_sign_opt_quoted(opts);
 
index 4d10664..94671d3 100755 (executable)
@@ -82,6 +82,20 @@ test_expect_success '--committer-date-is-author-date works with merge backend' '
        test_ctime_is_atime -1
 '
 
+test_expect_success '--committer-date-is-author-date works when rewording' '
+       GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
+       (
+               set_fake_editor &&
+               FAKE_COMMIT_MESSAGE=edited \
+                       FAKE_LINES="reword 1" \
+                       git rebase -i --committer-date-is-author-date HEAD^
+       ) &&
+       test_write_lines edited "" >expect &&
+       git log --format="%B" -1 >actual &&
+       test_cmp expect actual &&
+       test_ctime_is_atime -1
+'
+
 test_expect_success '--committer-date-is-author-date works with rebase -r' '
        git checkout side &&
        GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 &&
@@ -155,6 +169,21 @@ test_expect_success '--reset-author-date with --committer-date-is-author-date wo
        test_atime_is_ignored -2
 '
 
+test_expect_success 'reset-author-date with --committer-date-is-author-date works when rewording' '
+       GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
+       (
+               set_fake_editor &&
+               FAKE_COMMIT_MESSAGE=edited \
+                       FAKE_LINES="reword 1" \
+                       git rebase -i --committer-date-is-author-date \
+                               --reset-author-date HEAD^
+       ) &&
+       test_write_lines edited "" >expect &&
+       git log --format="%B" -1 >actual &&
+       test_cmp expect actual &&
+       test_atime_is_ignored -1
+'
+
 test_expect_success '--reset-author-date --committer-date-is-author-date works when forking merge' '
        GIT_SEQUENCE_EDITOR="echo \"merge -C $(git rev-parse HEAD) commit3\">" \
                PATH="./test-bin:$PATH" git rebase -i --strategy=test \