read_packed_refs(): report unexpected fopen() failures

The old code ignored any errors encountered when trying to fopen the "packed-refs" file, treating all such failures as if the file didn't exist. But it could be that there is some other error opening the file (e.g., permissions problems), and we don't want to silently ignore such problems. So report any failures that are not due to ENOENT. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Michael Haggerty committed May 22, 2017 at 16:17 UTC 89c571da56a1e84fe12308f727fac0e82c1d5be6
1 file changed +12 -2
refs/files-backend.c
+12 -2
@@ -251,8 +251,18 @@ static struct packed_ref_cache *read_packed_refs(const char *packed_refs_file)
251 packed_refs->cache->root->flag &= ~REF_INCOMPLETE;
252
253 f = fopen(packed_refs_file, "r");
254 - if (!f)
255 - return packed_refs;
254 + if (!f) {
255 + if (errno == ENOENT) {
256 + /*
257 + * This is OK; it just means that no
258 + * "packed-refs" file has been written yet,
259 + * which is equivalent to it being empty.
260 + */
261 + return packed_refs;
262 + } else {
263 + die_errno("couldn't read %s", packed_refs_file);
264 + }
265 + }
266
267 stat_validity_update(&packed_refs->validity, fileno(f));
268