Re: [PATCH 2/2] fetch-pack: refactor writing promisor file
From: Taylor Blau <hidden>
Date: 2021-01-13 15:21:09
On Wed, Jan 13, 2021 at 08:25:40AM -0500, Jeff King wrote:
quoted
+void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought) +{ + int i; + FILE *output = xfopen(promisor_name, "w"); + + for (i = 0; i < nr_sought; i++) + fprintf(output, "%s %s\n", oid_to_hex(&sought[i]->old_oid), + sought[i]->name); + fclose(output); +}We check errors on open via xfopen(), which is good. But we would not notice any problems writing via fprintf or fclose. Is it worth doing something like: err = ferror(output); err |= fclose(output); return err ? -1 : 0; ?
I agree below that *not* doing this isn't a regression against the current code, since it doesn't check either, but this could be done relatively easily. It is appropriate for both callers of write_promisor_file() to immediately die() if they get an error, so I think that this is potentially worth doing.
(As an aside, this ferror/fclose dance is awkward enough and has caused us enough questions in the past that I wonder if it is worth encapsulating into a wrapper).
From a quick grep through uses of ferror, there are a reasonable handful of spots that I think could be improved if there was a ferror+fclose helper, perhaps: xfclose().
The existing callers behave the same way (checking open, but not the writes), so definitely not a regression. But the helper function may provide an opportunity to make things more robust without adding a lot of duplicated code.
Yep.
-Peff
Thanks, Taylor