read_packed_refs(): report unexpected fopen() failures
authorMichael Haggerty <mhagger@alum.mit.edu>
Mon, 22 May 2017 14:17:51 +0000 (16:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 23 May 2017 05:29:56 +0000 (14:29 +0900)
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>
refs/files-backend.c
index b4fa745cd7058b2760f3bfb89fd5c1ee736ebc93..dbfd03f989faab91f788aaff8c61f97324068871 100644 (file)
@@ -251,8 +251,18 @@ static struct packed_ref_cache *read_packed_refs(const char *packed_refs_file)
        packed_refs->cache->root->flag &= ~REF_INCOMPLETE;
 
        f = fopen(packed_refs_file, "r");
-       if (!f)
-               return packed_refs;
+       if (!f) {
+               if (errno == ENOENT) {
+                       /*
+                        * This is OK; it just means that no
+                        * "packed-refs" file has been written yet,
+                        * which is equivalent to it being empty.
+                        */
+                       return packed_refs;
+               } else {
+                       die_errno("couldn't read %s", packed_refs_file);
+               }
+       }
 
        stat_validity_update(&packed_refs->validity, fileno(f));