]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sequencer: comment `--reference` subject line properly
authorKristoffer Haugsbakk <code@khaugsbakk.name>
Mon, 25 Nov 2024 20:13:12 +0000 (21:13 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Nov 2024 01:05:08 +0000 (10:05 +0900)
`git revert --reference <commit>` leaves behind a comment in the
first line:[1]

    # *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***

Meaning that the commit will just consist of the next line if the user
exits the editor directly:

    This reverts commit <--format=reference commit>

But the comment char here is hardcoded (#).  Which means that the
comment line will inadvertently be included in the commit message if
`core.commentChar`/`core.commentString` is in use.

† 1: See 43966ab3156 (revert: optionally refer to commit in the
    "reference" format, 2022-05-26)

Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
t/t3501-revert-cherry-pick.sh

index 1b6fd86f70bc4b2d836afb96be36776d784b5a0f..d26299cdea2be50d46fbd95989d9842f7eb7e0fa 100644 (file)
@@ -2341,8 +2341,8 @@ static int do_pick_commit(struct repository *r,
                next = parent;
                next_label = msg.parent_label;
                if (opts->commit_use_reference) {
-                       strbuf_addstr(&ctx->message,
-                               "*** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
+                       strbuf_commented_addf(&ctx->message, comment_line_str,
+                               "*** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
                } else if (skip_prefix(msg.subject, "Revert \"", &orig_subject) &&
                           /*
                            * We don't touch pre-existing repeated reverts, because
@@ -2352,12 +2352,13 @@ static int do_pick_commit(struct repository *r,
                           !starts_with(orig_subject, "Revert \"")) {
                        strbuf_addstr(&ctx->message, "Reapply \"");
                        strbuf_addstr(&ctx->message, orig_subject);
+                       strbuf_addstr(&ctx->message, "\n");
                } else {
                        strbuf_addstr(&ctx->message, "Revert \"");
                        strbuf_addstr(&ctx->message, msg.subject);
-                       strbuf_addstr(&ctx->message, "\"");
+                       strbuf_addstr(&ctx->message, "\"\n");
                }
-               strbuf_addstr(&ctx->message, "\n\nThis reverts commit ");
+               strbuf_addstr(&ctx->message, "\nThis reverts commit ");
                refer_to_commit(opts, &ctx->message, commit);
 
                if (commit->parents && commit->parents->next) {
index 411027fb58c7dfb657409980970e71005f2c79c5..b84fdfe8a321e48b47ee4bc766dccd84867258d9 100755 (executable)
@@ -228,6 +228,20 @@ test_expect_success 'identification of reverted commit (--reference)' '
        test_cmp expect actual
 '
 
+test_expect_success 'git revert --reference with core.commentChar' '
+       test_when_finished "git reset --hard to-ident" &&
+       git checkout --detach to-ident &&
+       GIT_EDITOR="head -n4 >actual" git -c core.commentChar=% revert \
+               --edit --reference HEAD &&
+       cat <<-EOF >expect &&
+       % *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***
+
+       This reverts commit $(git show -s --pretty=reference HEAD^).
+
+       EOF
+       test_cmp expect actual
+'
+
 test_expect_success 'identification of reverted commit (revert.reference)' '
        git checkout --detach to-ident &&
        git -c revert.reference=true revert --no-edit HEAD &&