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

Re: [PATCH] sequencer: comment checked-out branch properly

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Oct 31, 2024, 16:30 UTC
Message-ID
<14993bd1-034b-40ac-a991-cc3eabc956be@gmail.com>
In-Reply-To
<20cca28c-cc0f-4bfa-bc1c-6a3dd6bc25a8@app.fastmail.com>
Hi Kristoffer
On 23/10/2024 20:53, Kristoffer Haugsbakk wrote:
Show 35 quoted lines
> On Wed, Oct 23, 2024, at 20:44, Taylor Blau wrote:
> 
>> Makes sense, but the following command turns up a couple more results
>> even after applying:
>>
>>      $ git grep -p 'strbuf_addf([^,]*, "#'
>>      sequencer.c=static void update_squash_message_for_fixup(struct strbuf *msg)
>>      sequencer.c:    strbuf_addf(&buf1, "# %s\n", _(first_commit_msg_str));
>>      sequencer.c:    strbuf_addf(&buf2, "# %s\n", _(skip_first_commit_msg_str));
>>
>> I imagine that we would want similar treatment there as well, no?
> 
> Here is where I got confused.  I tried to make this test appended to
> `t/t3437-rebase-fixup-options.sh` yesterday in order to exercise this
> code:
> 
> ```
> test_expect_success 'sequence of fixup, fixup -C & squash --signoff works (but with commentChar)' '
> 	git checkout --detach B3 &&
> 	FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4 squash 5 fixup_-C 6" \
> 		FAKE_COMMIT_AMEND=squashed \
> 		FAKE_MESSAGE_COPY=actual-squash-message \
> 		git -c core.commentChar=% -c commit.status=false rebase -ik --signoff A &&
> 	git diff-tree --exit-code --patch HEAD B3 -- &&
> 	echo actual: &&
> 	cat actual-squash-message
> '
> ```> And the output looked correct, i.e. all-`%`.[1]
> † 1:
> 
> ```
> % This is a combination of 6 commits.
> % This is the 1st commit message:
> 
> B

This line should have been be commented out when adding "amend! B" commit below

Show 13 quoted lines
> Signed-off-by: Rebase Committer <rebase.committer@example.com>
> 
> % The commit message #2 will be skipped:
> 
> % fixup! B
> 
> % This is the commit message #3:
> 
> % amend! B
> 
> B
> 
> edited 1

This message should have been commented out when adding "amend! amend! ..." below

Show 13 quoted lines
> Signed-off-by: Rebase Committer <rebase.committer@example.com>
> 
> % This is the commit message #4:
> 
> % amend! amend! B
> 
> B
> 
> edited 1
> 
> edited 2
> 
> Signed-off-by: Rebase Committer <rebase.committer@example.com>

The diff below shows a fix and a new test that fails without the sequencer changes. The fix is based on master, so it might need updating to go on top of Junio's series. The test could probably be improved to use the existing setup.

Best Wishes
Phillip
diff --git a/sequencer.c b/sequencer.c
index 353d804999b..6e45b8ef04f 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,8 @@ 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_addf(&buf1, "%s %s\n", comment_line_str, _(first_commit_msg_str));
+	strbuf_addf(&buf2, "%s %s\n", comment_line_str, _(skip_first_commit_msg_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..59c031005e6 100755
--- a/t/t3437-rebase-fixup-options.sh
+++ b/t/t3437-rebase-fixup-options.sh
@@ -220,4 +220,34 @@ test_expect_success 'fixup -[Cc]<commit> works' '
  	test_cmp expect actual
  '
  
+test_expect_success 'fixup -C comments out previous messages' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	test_config core.commentString COMMENT &&
+	git checkout B &&
+	git commit --fixup=HEAD --allow-empty -m "EMPTY FIXUP" &&
+	test_commit new-file &&
+	echo changed >new-file.t &&
+
+	write_script editor.sh <<-\EOF &&
+	sed -n -e "1,2 p
+		   3 {
+			c\\
+			edited
+			q
+		   }" "$1" >"$1.tmp"
+	cat "$1.tmp" >"$1"
+	EOF
+
+	(
+		test_set_editor "$(pwd)/editor.sh" &&
+		git commit --fixup=amend:B new-file.t
+	) &&
+
+	test_must_fail git rebase --autosquash A &&
+	echo resolved >new-file.t &&
+	git add new-file.t &&
+	test_must_fail git rebase --continue &&
+	test_commit_message HEAD -m edited
+'
+
  test_done


> % This is the commit message #5:
> 
> % squash! amend! amend! B
> 
> edited squash
> 
> % This is the commit message #6:
> 
> % amend! amend! amend! B
> 
> B
> 
> edited 1
> 
> edited 2
> 
> edited 3
> squashed
> ok 13 - sequence of fixup, fixup -C & squash --signoff works (but with commentChar)
> ```
> 
Previous: Kristoffer HaugsbakkNext: Kristoffer Haugsbakk
Message 4 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.