git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 3/3] sequencer: comment commit messages properly

From
Kkristofferhaugsbakk@fastmail.com <kristofferhaugsbakk@fastmail.com>
Date
Nov 24, 2024, 20:56 UTC
Message-ID
<4c342bc04225cbf1e8fe2048c9dc9e8d261891e4.1732481200.git.code@khaugsbakk.name>
In-Reply-To
<cover.1732481200.git.code@khaugsbakk.name>
From: Kristoffer Haugsbakk <code@khaugsbakk.name>

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 9e3cebd97cb (rebase -i: add fixup [-C | -c] command,
    2021-01-29)
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Co-authored-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Reported-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
---
Notes (series):
    v3:
    • Message: Explain to the best of my knowledge what is going on here in
      the message body
    
      Link: https://lore.kernel.org/git/711b59d7-e649-4031-8924-a16fb632b4d4@gmail.com/
    • Fixed wrong/subpar use of trailers
    
      Link: https://lore.kernel.org/git/711b59d7-e649-4031-8924-a16fb632b4d4@gmail.com/
    v2:
    • Phillip contributed the test and the `strbuf_setlen` changes
Notes (meta-trailers):
    Co-authored-by: Phillip Wood <phillip.wood@dunelm.org.uk>
        Link: https://lore.kernel.org/git/cfa466b8-a87d-4b5d-b330-6c660897de48@gmail.com/#t
 sequencer.c                     | 12 ++++++++----
 t/t3437-rebase-fixup-options.sh | 15 +++++++++++++++
 2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/sequencer.c b/sequencer.c
index d26299cdea2..42a6f257cbb 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -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');
 }
@@ -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;
diff --git a/t/t3437-rebase-fixup-options.sh b/t/t3437-rebase-fixup-options.sh
index 7929e2e2e3a..a4b90e881e3 100755
--- a/t/t3437-rebase-fixup-options.sh
+++ b/t/t3437-rebase-fixup-options.sh
@@ -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 &&
-- 
2.47.0
Previous: kristofferhaugsbakk@fastmail.comNext: phillip.wood123@gmail.com
Message 32 of 42 in “sequencer: comment checked-out branch properly”
  1. sequencer: comment checked-out branch properlykristofferhaugsbakk@fastmail.com, Oct 23, 2024
  2. Taylor BlauOct 23, 2024
  3. Kristoffer HaugsbakkOct 23, 2024
  4. Phillip WoodOct 31, 2024
  5. Kristoffer HaugsbakkOct 31, 2024
  6. phillip.wood123@gmail.comOct 31, 2024
  7. Phillip WoodOct 31, 2024
  8. Kristoffer HaugsbakkOct 31, 2024
  9. Phillip WoodOct 31, 2024
  10. Taylor BlauOct 23, 2024
  11. Kristoffer HaugsbakkOct 23, 2024
  12. 0/3 sequencer: comment out properly in todo listkristofferhaugsbakk@fastmail.com, Nov 12, 2024
  13. 1/3 sequencer: comment checked-out branch properlykristofferhaugsbakk@fastmail.com, Nov 12, 2024
  14. Junio C HamanoNov 13, 2024
  15. Junio C HamanoNov 13, 2024
  16. phillip.wood123@gmail.comNov 13, 2024
  17. Junio C HamanoNov 13, 2024
  18. Kristoffer HaugsbakkNov 24, 2024
  19. 2/3 sequencer: comment `--reference` subject line properlykristofferhaugsbakk@fastmail.com, Nov 12, 2024
  20. Junio C HamanoNov 13, 2024
  21. phillip.wood123@gmail.comNov 13, 2024
  22. Junio C HamanoNov 13, 2024
  23. 3/3 sequencer: comment commit messages properlykristofferhaugsbakk@fastmail.com, Nov 12, 2024
  24. Junio C HamanoNov 13, 2024
  25. phillip.wood123@gmail.comNov 13, 2024
  26. Kristoffer HaugsbakkNov 24, 2024
  27. Junio C HamanoNov 13, 2024
  28. Kristoffer HaugsbakkNov 24, 2024
  29. 0/3 sequencer: comment out properly in todo listkristofferhaugsbakk@fastmail.com, Nov 24, 2024
  30. 1/3 sequencer: comment checked-out branch properlykristofferhaugsbakk@fastmail.com, Nov 24, 2024
  31. 2/3 sequencer: comment `--reference` subject line properlykristofferhaugsbakk@fastmail.com, Nov 24, 2024
  32. 3/3 sequencer: comment commit messages properlykristofferhaugsbakk@fastmail.com, Nov 24, 2024
  33. phillip.wood123@gmail.comNov 25, 2024
  34. Kristoffer HaugsbakkNov 25, 2024
  35. phillip.wood123@gmail.comNov 25, 2024
  36. 0/3 sequencer: comment out properly in todo listkristofferhaugsbakk@fastmail.com, Nov 25, 2024
  37. 1/3 sequencer: comment checked-out branch properlykristofferhaugsbakk@fastmail.com, Nov 25, 2024
  38. 2/3 sequencer: comment `--reference` subject line properlykristofferhaugsbakk@fastmail.com, Nov 25, 2024
  39. 3/3 sequencer: comment commit messages properlykristofferhaugsbakk@fastmail.com, Nov 25, 2024
  40. Junio C HamanoNov 26, 2024
  41. Phillip WoodNov 26, 2024
  42. Kristoffer HaugsbakkNov 27, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.