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

[PATCH 3/4] diff.c: emit_add_line() takes only the rest of the line

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 15, 2009, 06:15 UTC
Message-ID
<1252995306-32329-4-git-send-email-gitster@pobox.com>
In-Reply-To
<1252995306-32329-1-git-send-email-gitster@pobox.com>

As the first character on the line that is fed to this function is always "+", it is pointless to send that along with the rest of the line.

This change will make it easier to reuse the logic when emitting the rewrite diff, as we do not want to copy a line only to add "+"/"-"/" " immediately before its first character when we produce rewrite diff output.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 diff.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/diff.c b/diff.c
index b5c2574..baf46ab 100644
--- a/diff.c
+++ b/diff.c
@@ -416,20 +416,22 @@ static int new_blank_line_at_eof(struct emit_callback *ecbdata, const char *line
 	return ws_blank_line(line + 1, len - 1, ecbdata->ws_rule);
 }
 
-static void emit_add_line(const char *reset, struct emit_callback *ecbdata, const char *line, int len)
+static void emit_add_line(const char *reset,
+			  struct emit_callback *ecbdata,
+			  const char *line, int len)
 {
 	const char *ws = diff_get_color(ecbdata->color_diff, DIFF_WHITESPACE);
 	const char *set = diff_get_color(ecbdata->color_diff, DIFF_FILE_NEW);
 
 	if (!*ws)
-		emit_line(ecbdata->file, set, reset, line, len);
+		emit_line_0(ecbdata->file, set, reset, '+', line, len);
 	else if (new_blank_line_at_eof(ecbdata, line, len))
 		/* Blank line at EOF - paint '+' as well */
-		emit_line(ecbdata->file, ws, reset, line, len);
+		emit_line_0(ecbdata->file, ws, reset, '+', line, len);
 	else {
 		/* Emit just the prefix, then the rest. */
-		emit_line(ecbdata->file, set, reset, line, 1);
-		ws_check_emit(line + 1, len - 1, ecbdata->ws_rule,
+		emit_line_0(ecbdata->file, set, reset, '+', "", 0);
+		ws_check_emit(line, len, ecbdata->ws_rule,
 			      ecbdata->file, set, reset, ws);
 	}
 }
@@ -726,7 +728,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
 		emit_line(ecbdata->file, color, reset, line, len);
 	} else {
 		ecbdata->lno_in_postimage++;
-		emit_add_line(reset, ecbdata, line, len);
+		emit_add_line(reset, ecbdata, line + 1, len - 1);
 	}
 }
 
-- 
1.6.5.rc1.54.g4aad
Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 7 in “Colouring whitespace errors in diff -B output”
  1. 0/4 Colouring whitespace errors in diff -B outputJunio C Hamano, Sep 15, 2009
  2. 1/4 diff.c: shuffling code aroundJunio C Hamano, Sep 15, 2009
  3. 2/4 diff.c: split emit_line() from the first char and the rest of the lineJunio C Hamano, Sep 15, 2009
  4. 3/4 diff.c: emit_add_line() takes only the rest of the lineJunio C Hamano, Sep 15, 2009
  5. 4/4 diff -B: colour whitespace errorsJunio C Hamano, Sep 15, 2009
  6. Nanako ShiraishiSep 15, 2009
  7. Junio C HamanoSep 15, 2009

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.