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

[PATCH] commit: cope with scissors lines in commit message

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Jun 8, 2015, 01:40 UTC
Message-ID
<1433727639-5927-1-git-send-email-szeder@ira.uka.de>

The diff and submodule shortlog appended to the commit message template by 'git commit --verbose' are not stripped when the commit message contains an indented scissors line.

When cleaning up a commit message with 'git commit --verbose' or '--cleanup=scissors' the code is careful and triggers only on a pure scissors line, i.e. a line containing nothing but a comment character, a space, and the scissors cut. This is good, because people can embed scissor lines in the commit message while using 'git commit --verbose', and the text they write after their indented scissors line doesn't get deleted.

While doing so, however, the cleanup function only looks at the first line matching the scissors pattern and if it doesn't start at the beginning of the line, then the function just returns without performing any cleanup. This is bad, because a "real" scissors line added by 'git commit --verbose' might follow, and in that case the diff and submodule shortlog get included in the commit message.

Don't bail out if a scissors line doesn't start at the beginning of the line, but keep looking for a non-indented scissors line to fix this.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---
 t/t7502-commit.sh | 25 +++++++++++++++++++++++++
 wt-status.c       | 12 ++++++++----
 2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/t/t7502-commit.sh b/t/t7502-commit.sh
index 2e0d557243..77db3a31c3 100755
--- a/t/t7502-commit.sh
+++ b/t/t7502-commit.sh
@@ -239,6 +239,31 @@ EOF
 
 '
 
+test_expect_success 'cleanup commit messages (scissors option,-F,-e, scissors line in commit message)' '
+	echo >>negative &&
+	cat >text <<EOF &&
+
+  # to be kept
+
+  # ------------------------ >8 ------------------------
+  # to be kept, too
+# ------------------------ >8 ------------------------
+to be removed
+# ------------------------ >8 ------------------------
+to be removed, too
+EOF
+
+	cat >expect <<EOF &&
+  # to be kept
+
+  # ------------------------ >8 ------------------------
+  # to be kept, too
+EOF
+	git commit --cleanup=scissors -e -F text -a &&
+	git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
+	test_cmp expect actual
+'
+
 test_expect_success 'cleanup commit messages (strip option,-F)' '
 
 	echo >>negative &&
diff --git a/wt-status.c b/wt-status.c
index c56c78fb6f..e6d171a0cb 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -822,13 +822,17 @@ conclude:
 
 void wt_status_truncate_message_at_cut_line(struct strbuf *buf)
 {
-	const char *p;
+	const char *p = buf->buf;
 	struct strbuf pattern = STRBUF_INIT;
 
 	strbuf_addf(&pattern, "%c %s", comment_line_char, cut_line);
-	p = strstr(buf->buf, pattern.buf);
-	if (p && (p == buf->buf || p[-1] == '\n'))
-		strbuf_setlen(buf, p - buf->buf);
+	while ((p = strstr(p, pattern.buf))) {
+		if (p == buf->buf || p[-1] == '\n') {
+			strbuf_setlen(buf, p - buf->buf);
+			break;
+		}
+		p++;
+	}
 	strbuf_release(&pattern);
 }
 
-- 
2.4.2.423.gad3a03f
Next: Junio C Hamano
Message 1 of 5 in “commit: cope with scissors lines in commit message”
  1. commit: cope with scissors lines in commit messageSZEDER Gábor, Jun 8, 2015
  2. Junio C HamanoJun 8, 2015
  3. SZEDER GáborJun 8, 2015
  4. commit: cope with scissors lines in commit messageSZEDER Gábor, Jun 9, 2015
  5. commit: cope with scissors lines in commit messageSZEDER Gábor, Jun 9, 2015

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.