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

[PATCH 6/5] merge-ll: handle external driver status before reading result

From
Jeff King <peff@peff.net>
Date
Sep 29, 2026, 20:43 UTC
Message-ID
<20260929204320.GA1734030@coredump.intra.peff.net>
In-Reply-To
<20260929204157.GA1733321@coredump.intra.peff.net>

After running an external merge driver, ll_ext_merge() reads its output and cleans up the temporary files before converting the exit status to an ll_merge_result.

Move that conversion immediately after run_command(). This will let us override the result if reading the output fails, without having to fake an exit status. No behavior change yet.

It is tempting to only call read_mmfile() when we have LL_MERGE_OK, but callers do care about the result even with LL_MERGE_CONFLICT (e.g., the output may contain a partial). I think we could safely skip it for LL_MERGE_ERROR, but that's a rare case and not worth complicating the code for.

Signed-off-by: Jeff King <peff@peff.net>
---
 merge-ll.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/merge-ll.c b/merge-ll.c
index 7fab7c5438..4d82836bc5 100644
--- a/merge-ll.c
+++ b/merge-ll.c
@@ -240,20 +240,20 @@ static enum ll_merge_result ll_ext_merge(const struct ll_merge_driver *fn,
 	child.use_shell = 1;
 	strvec_push(&child.args, cmd.buf);
 	status = run_command(&child);
-
-	/* We can ignore errors; result is left NULL/0 in that case. */
-	read_mmfile(result, temp[1]);
-
-	for (i = 0; i < 3; i++)
-		unlink_or_warn(temp[i]);
-	strbuf_release(&cmd);
 	if (!status)
 		ret = LL_MERGE_OK;
 	else if (status <= 128)
 		ret = LL_MERGE_CONFLICT;
 	else
 		/* died due to a signal: WTERMSIG(status) + 128 */
 		ret = LL_MERGE_ERROR;
+
+	/* We can ignore errors; result is left NULL/0 in that case. */
+	read_mmfile(result, temp[1]);
+
+	for (i = 0; i < 3; i++)
+		unlink_or_warn(temp[i]);
+	strbuf_release(&cmd);
 	return ret;
 }
 
-- 
2.56.0.325.g545d7e68bc
Previous: Jeff KingNext: Jeff King
Message 13 of 37 in “use size_t for xdiff mmfile_t”
  1. 0/5 use size_t for xdiff mmfile_tJeff King, Sep 29, 2026
  2. 1/5 xdiff: clean up read_mmfile() allocations on errorJeff King, Sep 29, 2026
  3. 2/5 xdiff: replace mmbuffer_t with mmfile_tJeff King, Sep 29, 2026
  4. 3/5 xdiff: use size_t for buffer sizesJeff King, Sep 29, 2026
  5. 4/5 merge-ll: use read_mmfile() to read external merge resultsJeff King, Sep 29, 2026
  6. 5/5 xdiff: NUL-terminate buffers read by read_mmfile()Jeff King, Sep 29, 2026
  7. D. Ben KnobleSep 29, 2026
  8. Junio C HamanoSep 29, 2026
  9. Junio C HamanoSep 29, 2026
  10. Junio C HamanoSep 29, 2026
  11. Jeff KingSep 29, 2026
  12. Jeff KingSep 29, 2026
  13. 6/5 merge-ll: handle external driver status before reading resultJeff King, Sep 29, 2026
  14. 7/5 merge-ll: report an error when reading external merge results failsJeff King, Sep 29, 2026
  15. Junio C HamanoSep 29, 2026
  16. Jeff KingSep 29, 2026
  17. Patrick SteinhardtSep 30, 2026
  18. Patrick SteinhardtSep 30, 2026
  19. Patrick SteinhardtSep 30, 2026
  20. Junio C HamanoSep 30, 2026
  21. Junio C HamanoSep 30, 2026
  22. Jeff KingSep 30, 2026
  23. Jeff KingSep 30, 2026
  24. Jeff KingSep 30, 2026
  25. Jeff KingSep 30, 2026
  26. 0/7 use size_t for xdiff mmfile_tJeff King, Sep 30, 2026
  27. 1/7 xdiff: clean up read_mmfile() allocations on errorJeff King, Sep 30, 2026
  28. 2/7 xdiff: replace mmbuffer_t with mmfile_tJeff King, Sep 30, 2026
  29. 3/7 xdiff: use size_t for buffer sizesJeff King, Sep 30, 2026
  30. 4/7 xdiff: NUL-terminate buffers read by read_mmfile()Jeff King, Sep 30, 2026
  31. 5/7 merge-ll: use read_mmfile() to read external merge resultsJeff King, Sep 30, 2026
  32. 6/7 merge-ll: handle external driver status before reading resultJeff King, Sep 30, 2026
  33. 7/7 merge-ll: report an error when reading external merge results failsJeff King, Sep 30, 2026
  34. Patrick SteinhardtOct 1, 2026
  35. Patrick SteinhardtOct 1, 2026
  36. Junio C HamanoOct 1, 2026
  37. Junio C HamanoOct 1, 2026

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.