git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GSOC PATCH] commit: avoid scanning trailing comments when 'core.commentChar' is "auto"
@ 2025-06-26 13:22 Ayush Chandekar
  2025-06-26 14:33 ` Junio C Hamano
                   ` (5 more replies)
  0 siblings, 6 replies; 44+ messages in thread
From: Ayush Chandekar @ 2025-06-26 13:22 UTC (permalink / raw)
  To: git; +Cc: christian.couder, shyamthakkar001, phillip.wood123,
	Ayush Chandekar

When core.commentChar is set to "auto", Git selects a comment character
by scanning the commit message contents and avoiding any character
already present in the message.

If the message still contains old conflict comments (starting with a
comment character), Git assumes that character is in use and chooses a
different one. As a result, those existing comment lines are no longer
recognized as comments and end up being included in the final commit
message.

To avoid this, skip scanning the trailing comment block when selecting
the comment character. This allows Git to safely reuse the original
character when appropriate, keeping the commit message clean and free of
leftover conflict information.

Background:

The "auto" value for core.commentchar was introduced in the commit
`84c9dc2` (commit: allow core.commentChar=auto for character auto
selection) but did not exhibt this issue at that time.

The bug was introduced in commit `a6c2654` (rebase -m: fix --signoff
with conflicts) where Git started writing conflict comments to the file
at 'rebase_path_message()'.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Ghanshyam Thakkar <shyamthakkar001@gmail.com>
Signed-off-by: Ayush Chandekar <ayu.chandekar@gmail.com>
---

I came across this bug when working on a patch series that removes 
the global variables related to the "commentChar" config options.

 builtin/commit.c           |  6 +++++-
 t/t3418-rebase-continue.sh | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/builtin/commit.c b/builtin/commit.c
index fba0dded64..63e7158e98 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -688,6 +688,10 @@ static void adjust_comment_line_char(const struct strbuf *sb)
 	char candidates[] = "#;@!$%^&|:";
 	char *candidate;
 	const char *p;
+	size_t cutoff;
+
+	/* Ignore comment chars in trailing comments (e.g., Conflicts:) */
+	cutoff = sb->len - ignored_log_message_bytes(sb->buf, sb->len);
 
 	if (!memchr(sb->buf, candidates[0], sb->len)) {
 		free(comment_line_str_to_free);
@@ -700,7 +704,7 @@ static void adjust_comment_line_char(const struct strbuf *sb)
 	candidate = strchr(candidates, *p);
 	if (candidate)
 		*candidate = ' ';
-	for (p = sb->buf; *p; p++) {
+	for (p = sb->buf; p + 1 < sb->buf + cutoff; p++) {
 		if ((p[0] == '\n' || p[0] == '\r') && p[1]) {
 			candidate = strchr(candidates, p[1]);
 			if (candidate)
diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
index 127216f722..a8e89a250b 100755
--- a/t/t3418-rebase-continue.sh
+++ b/t/t3418-rebase-continue.sh
@@ -328,6 +328,24 @@ test_expect_success 'there is no --no-reschedule-failed-exec in an ongoing rebas
 	test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec
 '
 
+test_expect_success 'no change in comment character due to conflicts markers with core.commentChar=auto' '
+	test_commit base file &&
+	git checkout -b branch-a &&
+	test_commit A file &&
+	git checkout -b branch-b base &&
+	test_commit B file &&
+	test_must_fail git rebase branch-a &&
+	printf "B\nA\n" >file &&
+	git add file &&
+	write_script fake-editor <<-\EOF &&
+	exit 0
+	EOF
+	FAKE_EDITOR="$(pwd)/fake-editor" &&
+	GIT_EDITOR="\"\$FAKE_EDITOR\"" git -c core.commentChar=auto rebase --continue &&
+	# Check that "#" is still the comment character.
+	test_grep "# Changes to be committed:" .git/COMMIT_EDITMSG
+'
+
 test_orig_head_helper () {
 	test_when_finished 'git rebase --abort &&
 		git checkout topic &&
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2025-07-16 15:29 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26 13:22 [GSOC PATCH] commit: avoid scanning trailing comments when 'core.commentChar' is "auto" Ayush Chandekar
2025-06-26 14:33 ` Junio C Hamano
2025-06-26 21:30   ` Ayush Chandekar
2025-06-26 15:40 ` Kristoffer Haugsbakk
2025-06-26 21:28   ` Ayush Chandekar
2025-06-26 22:16 ` [GSOC PATCH v2] " Ayush Chandekar
2025-06-27  8:34   ` Phillip Wood
2025-06-27 14:52     ` Junio C Hamano
2025-06-28 10:37       ` Ayush Chandekar
2025-06-28 13:38       ` Phillip Wood
2025-06-28 14:33         ` Ayush Chandekar
2025-06-30  8:59           ` Phillip Wood
2025-06-30 17:34             ` Ayush Chandekar
2025-06-28 15:10         ` Phillip Wood
2025-06-30 14:11         ` Junio C Hamano
2025-06-28 10:18     ` Ayush Chandekar
2025-06-27  9:04   ` Christian Couder
2025-06-30 18:25 ` [GSOC PATCH v3] " Ayush Chandekar
2025-07-01 13:17   ` Phillip Wood
2025-07-01 18:33     ` Ayush Chandekar
2025-07-01 19:31       ` Phillip Wood
2025-07-02 23:46         ` Ayush Chandekar
2025-07-04  8:23           ` Phillip Wood
2025-07-08 15:47             ` Ayush Chandekar
2025-07-09 14:17               ` Phillip Wood
2025-07-15 18:51 ` [GSOC PATCH 0/2] commit: improve behaviour of core.commentChar=auto for comments in commit messages Ayush Chandekar
2025-07-15 18:51   ` [GSOC PATCH 1/2] commit: avoid scanning trailing comments when 'core.commentChar' is "auto" Ayush Chandekar
2025-07-15 18:57     ` [GSOC PATCH v4 " Ayush Chandekar
2025-07-15 18:51   ` [GSOC PATCH 2/2] config: set comment_line_str to "#" when core.commentChar=auto Ayush Chandekar
2025-07-15 18:57     ` [GSOC PATCH v4 " Ayush Chandekar
2025-07-15 21:23     ` [GSOC PATCH " Junio C Hamano
2025-07-15 22:15       ` Ayush Chandekar
2025-07-15 23:30         ` Junio C Hamano
2025-07-16 11:04           ` Ayush Chandekar
2025-07-16 15:21             ` Junio C Hamano
2025-07-16 15:24               ` Phillip Wood
2025-07-16 15:29                 ` Junio C Hamano
2025-07-15 18:56   ` [GSOC PATCH v4 0/2] commit: improve behaviour of core.commentChar=auto for comments in commit messages Ayush Chandekar
2025-07-16 11:43 ` [GSOC PATCH v5 " Ayush Chandekar
2025-07-16 11:43   ` [GSOC PATCH v5 1/2] commit: avoid scanning trailing comments when 'core.commentChar' is "auto" Ayush Chandekar
2025-07-16 11:43   ` [GSOC PATCH v5 2/2] config: set comment_line_str to "#" when core.commentChar=auto Ayush Chandekar
2025-07-16 15:28     ` Junio C Hamano
2025-07-16 14:28   ` [GSOC PATCH v5 0/2] commit: improve behaviour of core.commentChar=auto for comments in commit messages Phillip Wood
2025-07-16 15:29     ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).