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

[PATCH] diff: reset color before printing newline

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Jun 16, 2008, 22:00 UTC
Message-ID
<1213653602-31307-1-git-send-email-szeder@ira.uka.de>

It worked that way since commit 50f575fc (Tweak diff colors, 2006-06-22), but commit c1795bb0 (Unify whitespace checking, 2007-12-13) changed it. This patch restores the old behaviour.

Besides Linus' arguments in the log message of 50f575fc, resetting color before printing newline is also important to keep 'git add --patch' happy. If the last line(s) of a file are removed, then that hunk will end with a colored line. However, if the newline comes before the color reset, then the diff output will have an additional line at the end containing only the reset sequence. This causes trouble in git-add--interactive.perl's parse_diff function, because @colored will have one more element than @diff, and that last element will contain the color reset. The elements of these arrays will then be copied to @hunk, but only as many as the number of elements in @diff. As a result the last color reset is lost and all subsequent terminal output will be printed in color.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---

I'm not sure about putting a newline unconditionally at the end of the line, but this was the status quo before c1795bb0.

 diff.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/diff.c b/diff.c
index 62fdc54..f23657b 100644
--- a/diff.c
+++ b/diff.c
@@ -514,9 +514,13 @@ 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')
+		len--;
+
 	fputs(set, file);
 	fwrite(line, len, 1, file);
 	fputs(reset, file);
+	fputc('\n', file);
 }
 
 static void emit_add_line(const char *reset, struct emit_callback *ecbdata, const char *line, int len)
-- 
1.5.6.rc2.55.g9b8c
Next: Junio C Hamano
Message 1 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.