[PATCH v2 0/3] merge-ll: Cleanup merge driver temporaries after
- From
Jeff King <peff@peff.net>
- Date
- Sep 11, 2026, 17:10 UTC
- Message-ID
- <20260911171044.GA1609692@coredump.intra.peff.net>
- In-Reply-To
- <aqQN_Q6ZAeyTy7WA@localhost.localdomain>
On Fri, Sep 11, 2026 at 04:43:08PM +0200, Michal Koutný wrote:
Show 6 quoted lines
> > In the worst case we can just call register_tempfile() on each path, but > > I think this code could be taught to use the actual creation. Something > > like the patch below (only lightly tested). > > I've tested it and it works (cleans up both after SIGINT and regular > termination).
Thanks for testing. I considered putting something in the test suite, but it gets ugly (we'd have the external driver pause, signal a fifo, then kill git-merge and it with SIGINT). I guess an alternative would be setting GIT_ALLOC_LIMIT to something low, and then generating a too-large output, which would cause xmalloc() to fail, which I believe would also fail. But then we're not really testing the signal handling.
Hmm. I wonder if leaving the files could actually be a _feature_. If you completed the merge with the external tool but we barfed reading it back in, would it be useful to leave the file in place? It's possible, I suppose, but I think it is more likely to be a nuisance (and we already delete it for things like read() errors, just not anything that would cause us to die()).
> (There's only a warning about constness, one should not change the > tempfile's path buffer. But here the ovewrite happens only if there were > trialing dirseps, which they aren't as the filename is under control.)
Yeah, I've fixed it in this iteration, plus a few tweaks:
- I did the strbuf cleanup I mentioned (patch 1)
- we should be using close_tempfile_gently() instead of close() on the tempfiles so that they don't get double-closed when deleting
- that made me notice a small error-checking bug in the original code, fixed in patch 2
> Do you want me to send your variant as v2 or will you?
Here it is. I've labeled it v2, and I stole your commit message for the third patch.
[1/3]: merge-ll: use strbuf to read back external merge result [2/3]: merge-ll: catch close() errors when writing external tempfiles [3/3]: merge-ll: use tempfile API for external driver files
merge-ll.c | 68 +++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 31 deletions(-)
-Peff