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

Re: [PATCH] diff: reset color before printing newline

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Jun 17, 2008, 00:22 UTC
Message-ID
<20080617002205.GD7003@neumann>
In-Reply-To
<1213653602-31307-1-git-send-email-szeder@ira.uka.de>
Junio,
On Tue, Jun 17, 2008 at 12:00:02AM +0200, SZEDER Gábor wrote:
> I'm not sure about putting a newline unconditionally at the end of the
> line, but this was the status quo before c1795bb0.

we _must_ not print a newline when there was none, as it breaks "normal" colored diffs very badly.

Since c1795bb0, for whatever reason, checkdiff_consume() first calls emit_line() to print only the first '+' character of the line, without trailing newline, and then calls check_and_emit_line() to print the rest of the line. Now if we restore the status quo prior to c1795bb0 regarding unconditional newlines in emit_line(), then there is always a newline between the the '+' and the rest of the line, which is bad, bad, bad.

So this should be squashed to the previous patch.
---
 diff.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/diff.c b/diff.c
index f23657b..722f577 100644
--- a/diff.c
+++ b/diff.c
@@ -514,13 +514,18 @@ const char *diff_get_color(int diff_use_color, enum color_diff ix)
 
 static void emit_line(FILE *file, const char *set, const char *reset, const char *line, int len)
 {
-	if (len > 0 && line[len-1] == '\n')
+	int trailing_newline = 0;
+
+	if (len > 0 && line[len-1] == '\n') {
 		len--;
+		trailing_newline = 1;
+	}
 
 	fputs(set, file);
 	fwrite(line, len, 1, file);
 	fputs(reset, file);
-	fputc('\n', file);
+	if (trailing_newline)
+		fputc('\n', file);
 }
 
 static void emit_add_line(const char *reset, struct emit_callback *ecbdata, const char *line, int len)
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 4 in “diff: reset color before printing newline”
  1. diff: reset color before printing newlineSZEDER Gábor, Jun 16, 2008
  2. Junio C HamanoJun 16, 2008
  3. SZEDER GáborJun 17, 2008
  4. Junio C HamanoJun 17, 2008

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.