]> git.ipfire.org Git - thirdparty/git.git/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 a19980f62d922a453f57de4c9f0c7c9137098133..6592eff1177d4aafae1bfbabcf7f50e098a71b09 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 4d106642ba71c297802b893f281eaefc633e1a16..94671d3c4650463525006090702210eda76594e0 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 \