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

[PATCH] Add a newline before appending "Signed-off-by: " line

From
Junio C Hamano <junkio@cox.net>
Date
Aug 13, 2006, 22:33 UTC
Message-ID
<7vr6zkjmeq.fsf@assigned-by-dhcp.cox.net>
From: Franck Bui-Huu <vagabon.xyz@gmail.com>

Whef the last line of the commit log message does not end with "^[-A-Za-z]+: [^@]+@", append a newline after it to separate the body of the commit log message from the run of sign-off and ack lines. e.g. "Signed-off-by: A U Thor <au.thor@example.com>" or "Acked-by: Me <myself@example.org>".

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 * This is based on one-month old patch from Franck, which was
   not applied back then, with updates suggested by Linus, but I
   did not do "^\S+:.*@.*$", which would have caught the last
   line of the commit log body of this commit itself.  RFC2822
   "field-name" can contain anything other than controls, SP and
   colon, but I think in practice "alnum plus dash" would be a
   reasonable and safer pattern to use (and we are not dealing
   with RFC2822 headers here anyway).
   It probably is not worth to do this as a "bugfix", so it 
   is queued for "next", not for "maint".
 log-tree.c |   44 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)
diff --git a/log-tree.c b/log-tree.c
index 05ede0c..031af88 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -19,7 +19,7 @@ static int append_signoff(char *buf, int
 	char *cp = buf;
 
 	/* Do we have enough space to add it? */
-	if (buf_sz - at <= strlen(signed_off_by) + signoff_len + 2)
+	if (buf_sz - at <= strlen(signed_off_by) + signoff_len + 3)
 		return at;
 
 	/* First see if we already have the sign-off by the signer */
@@ -34,6 +34,48 @@ static int append_signoff(char *buf, int
 			return at; /* we already have him */
 	}
 
+	/* Does the last line already end with "^[-A-Za-z]+: [^@]+@"?
+	 * If not, add a blank line to separate the message from
+	 * the run of Signed-off-by: and Acked-by: lines.
+	 */
+	{
+		char ch;
+		int seen_colon, seen_at, seen_name, seen_head, not_signoff;
+		seen_colon = 0;
+		seen_at = 0;
+		seen_name = 0;
+		seen_head = 0;
+		not_signoff = 0;
+		cp = buf + at;
+		while (buf <= --cp && (ch = *cp) == '\n')
+			;
+		while (!not_signoff && buf <= cp && (ch = *cp--) != '\n') {
+			if (!seen_at) {
+				if (ch == '@')
+					seen_at = 1;
+				continue;
+			}
+			if (!seen_colon) {
+				if (ch == '@')
+					not_signoff = 1;
+				else if (ch == ':')
+					seen_colon = 1;
+				else
+					seen_name = 1;
+				continue;
+			}
+			if (('A' <= ch && ch <= 'Z') ||
+			    ('a' <= ch && ch <= 'z') ||
+			    ch == '-') {
+				seen_head = 1;
+				continue;
+			}
+			not_signoff = 1;
+		}
+		if (not_signoff || !seen_head || !seen_name)
+			buf[at++] = '\n';
+	}
+
 	strcpy(buf + at, signed_off_by);
 	at += strlen(signed_off_by);
 	strcpy(buf + at, signoff);
-- 
1.4.2.g10a6
Next: Franck Bui-Huu
Message 1 of 2 in “Add a newline before appending "Signed-off-by: " line”
  1. Add a newline before appending "Signed-off-by: " lineJunio C Hamano, Aug 13, 2006
  2. Franck Bui-HuuAug 29, 2006

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.