sequencer: comment --reference subject line properly

`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 43966ab315 (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>
This commit is contained in:
Kristoffer Haugsbakk
2024-11-25 21:13:12 +01:00
committed by Junio C Hamano
parent 94304b9f48
commit 515d034f8d
2 changed files with 19 additions and 4 deletions

View 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) {

View File

@ -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 &&