Skip to content

Commit 7e2f377

Browse files
LemmingAvalanchephillipwood
authored andcommitted
sequencer: comment commit messages properly
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]>
1 parent 515d034 commit 7e2f377

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

sequencer.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1941,10 +1941,10 @@ static int seen_squash(struct replay_ctx *ctx)
19411941

19421942
static void update_comment_bufs(struct strbuf *buf1, struct strbuf *buf2, int n)
19431943
{
1944-
strbuf_setlen(buf1, 2);
1944+
strbuf_setlen(buf1, strlen(comment_line_str) + 1);
19451945
strbuf_addf(buf1, _(nth_commit_msg_fmt), n);
19461946
strbuf_addch(buf1, '\n');
1947-
strbuf_setlen(buf2, 2);
1947+
strbuf_setlen(buf2, strlen(comment_line_str) + 1);
19481948
strbuf_addf(buf2, _(skip_nth_commit_msg_fmt), n);
19491949
strbuf_addch(buf2, '\n');
19501950
}
@@ -1963,8 +1963,12 @@ static void update_squash_message_for_fixup(struct strbuf *msg)
19631963
size_t orig_msg_len;
19641964
int i = 1;
19651965

1966-
strbuf_addf(&buf1, "# %s\n", _(first_commit_msg_str));
1967-
strbuf_addf(&buf2, "# %s\n", _(skip_first_commit_msg_str));
1966+
strbuf_add_commented_lines(&buf1, _(first_commit_msg_str),
1967+
strlen(_(first_commit_msg_str)),
1968+
comment_line_str);
1969+
strbuf_add_commented_lines(&buf2, _(skip_first_commit_msg_str),
1970+
strlen(_(skip_first_commit_msg_str)),
1971+
comment_line_str);
19681972
s = start = orig_msg = strbuf_detach(msg, &orig_msg_len);
19691973
while (s) {
19701974
const char *next;

t/t3437-rebase-fixup-options.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,21 @@ test_expect_success 'fixup -C with conflicts gives correct message' '
127127
test_cmp expected-author actual-author
128128
'
129129

130+
test_expect_success 'conflicting fixup -C after fixup with custom comment string' '
131+
test_config core.commentString COMMENT &&
132+
test_when_finished "test_might_fail git rebase --abort" &&
133+
git checkout --detach A3 &&
134+
test_must_fail env FAKE_LINES="1 fixup 2 fixup_-C 4" git rebase -i A &&
135+
echo resolved >A &&
136+
git add A &&
137+
FAKE_COMMIT_AMEND=edited git rebase --continue &&
138+
test_commit_message HEAD <<-\EOF
139+
A3
140+
141+
edited
142+
EOF
143+
'
144+
130145
test_expect_success 'skipping fixup -C after fixup gives correct message' '
131146
test_when_finished "test_might_fail git rebase --abort" &&
132147
git checkout --detach A3 &&

0 commit comments

Comments
 (0)