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

[PATCH 7/9] diff: convert --check to use a hunk callback

From
Jeff King <peff@peff.net>
Date
Nov 2, 2018, 06:39 UTC
Message-ID
<20181102063903.GG31216@sigill.intra.peff.net>
In-Reply-To
<20181102063156.GA30252@sigill.intra.peff.net>

The "diff --check" code needs to know the line number on which each hunk starts in order to generate its output. We get that now by parsing the hunk header line generated by xdiff, but it's much simpler to just pass it directly using a hunk callback.

Signed-off-by: Jeff King <peff@peff.net>
---
 diff.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/diff.c b/diff.c
index 37035110dc..e38d1ecaf4 100644
--- a/diff.c
+++ b/diff.c
@@ -3128,6 +3128,15 @@ static int is_conflict_marker(const char *line, int marker_size, unsigned long l
 	return 1;
 }
 
+static void checkdiff_consume_hunk(void *priv,
+				   long ob, long on, long nb, long nn,
+				   const char *func, long funclen)
+
+{
+	struct checkdiff_t *data = priv;
+	data->lineno = nb - 1;
+}
+
 static void checkdiff_consume(void *priv, char *line, unsigned long len)
 {
 	struct checkdiff_t *data = priv;
@@ -3163,12 +3172,6 @@ static void checkdiff_consume(void *priv, char *line, unsigned long len)
 			      data->o->file, set, reset, ws);
 	} else if (line[0] == ' ') {
 		data->lineno++;
-	} else if (line[0] == '@') {
-		char *plus = strchr(line, '+');
-		if (plus)
-			data->lineno = strtol(plus, NULL, 10) - 1;
-		else
-			die("invalid diff");
 	}
 }
 
@@ -3684,8 +3687,9 @@ static void builtin_checkdiff(const char *name_a, const char *name_b,
 		memset(&xecfg, 0, sizeof(xecfg));
 		xecfg.ctxlen = 1; /* at least one context line */
 		xpp.flags = 0;
-		if (xdi_diff_outf(&mf1, &mf2, NULL, checkdiff_consume,
-				  &data, &xpp, &xecfg))
+		if (xdi_diff_outf(&mf1, &mf2, checkdiff_consume_hunk,
+				  checkdiff_consume, &data,
+				  &xpp, &xecfg))
 			die("unable to generate checkdiff for %s", one->path);
 
 		if (data.ws_rule & WS_BLANK_AT_EOF) {
-- 
2.19.1.1336.g081079ac04
Previous: Jeff KingNext: Jeff King
Message 11 of 14 in “saner xdiff hunk callbacks”
  1. 0/9 saner xdiff hunk callbacksJeff King, Nov 2, 2018
  2. 1/9 xdiff: provide a separate emit callback for hunksJeff King, Nov 2, 2018
  3. 2/9 xdiff-interface: provide a separate consume callback for hunksJeff King, Nov 2, 2018
  4. 3/9 diff: avoid generating unused hunk header linesJeff King, Nov 2, 2018
  5. Stefan BellerNov 2, 2018
  6. Jeff KingNov 2, 2018
  7. Junio C HamanoNov 3, 2018
  8. 4/9 diff: discard hunk headers for patch-ids earlierJeff King, Nov 2, 2018
  9. 5/9 diff: use hunk callback for word-diffJeff King, Nov 2, 2018
  10. 6/9 combine-diff: use an xdiff hunk callbackJeff King, Nov 2, 2018
  11. 7/9 diff: convert --check to use a hunk callbackJeff King, Nov 2, 2018
  12. 8/9 range-diff: use a hunk callbackJeff King, Nov 2, 2018
  13. 9/9 xdiff-interface: drop parse_hunk_header()Jeff King, Nov 2, 2018
  14. Junio C HamanoNov 2, 2018

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.