Skip to content

Commit

Permalink
sequencer: comment commit messages properly
Browse files Browse the repository at this point in the history
The rebase todo editor has commands like `fixup -c` which affects
the commit messages of the rebased commits.[1]  For example:

    pick hash1 <msg>
    fixup hash2 <msg>
    fixup -c hash3 <msg>

This says that hash2 and hash3 should be squashed into hash1 and
that hash3’s commit message should be used for the resulting commit.
So the user is presented with an editor where the two first commit
messages are commented out and the third is not.  However this does
not work if `core.commentChar`/`core.commentString` is in use since
the comment char is hardcoded (#) in this `sequencer.c` function.
As a result the first commit message will not be commented out.

† 1: See 9e3cebd (rebase -i: add fixup [-C | -c] command,
    2021-01-29)

Signed-off-by: Phillip Wood <[email protected]>
Co-authored-by: Phillip Wood <[email protected]>
Reported-by: Taylor Blau <[email protected]>
Signed-off-by: Kristoffer Haugsbakk <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
2 people authored and gitster committed Nov 26, 2024
1 parent 515d034 commit 7e2f377
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
12 changes: 8 additions & 4 deletions sequencer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1941,10 +1941,10 @@ static int seen_squash(struct replay_ctx *ctx)

static void update_comment_bufs(struct strbuf *buf1, struct strbuf *buf2, int n)
{
strbuf_setlen(buf1, 2);
strbuf_setlen(buf1, strlen(comment_line_str) + 1);
strbuf_addf(buf1, _(nth_commit_msg_fmt), n);
strbuf_addch(buf1, '\n');
strbuf_setlen(buf2, 2);
strbuf_setlen(buf2, strlen(comment_line_str) + 1);
strbuf_addf(buf2, _(skip_nth_commit_msg_fmt), n);
strbuf_addch(buf2, '\n');
}
Expand All @@ -1963,8 +1963,12 @@ static void update_squash_message_for_fixup(struct strbuf *msg)
size_t orig_msg_len;
int i = 1;

strbuf_addf(&buf1, "# %s\n", _(first_commit_msg_str));
strbuf_addf(&buf2, "# %s\n", _(skip_first_commit_msg_str));
strbuf_add_commented_lines(&buf1, _(first_commit_msg_str),
strlen(_(first_commit_msg_str)),
comment_line_str);
strbuf_add_commented_lines(&buf2, _(skip_first_commit_msg_str),
strlen(_(skip_first_commit_msg_str)),
comment_line_str);
s = start = orig_msg = strbuf_detach(msg, &orig_msg_len);
while (s) {
const char *next;
Expand Down
15 changes: 15 additions & 0 deletions t/t3437-rebase-fixup-options.sh
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,21 @@ test_expect_success 'fixup -C with conflicts gives correct message' '
test_cmp expected-author actual-author
'

test_expect_success 'conflicting fixup -C after fixup with custom comment string' '
test_config core.commentString COMMENT &&
test_when_finished "test_might_fail git rebase --abort" &&
git checkout --detach A3 &&
test_must_fail env FAKE_LINES="1 fixup 2 fixup_-C 4" git rebase -i A &&
echo resolved >A &&
git add A &&
FAKE_COMMIT_AMEND=edited git rebase --continue &&
test_commit_message HEAD <<-\EOF
A3
edited
EOF
'

test_expect_success 'skipping fixup -C after fixup gives correct message' '
test_when_finished "test_might_fail git rebase --abort" &&
git checkout --detach A3 &&
Expand Down

0 comments on commit 7e2f377

Please sign in to comment.