packed_read_raw_ref(): read the reference from the mmapped buffer
authorMichael Haggerty <mhagger@alum.mit.edu>
Mon, 25 Sep 2017 08:00:13 +0000 (10:00 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 Sep 2017 09:02:45 +0000 (18:02 +0900)
Instead of reading the reference from the `ref_cache`, read it
directly from the mmapped buffer.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs/packed-backend.c
index abf14a14059cf88b67bc67577e7dd08ad1066dd0..be614e79f530f492d9dc7c6bcf9242ff1a1a712f 100644 (file)
@@ -876,18 +876,22 @@ static int packed_read_raw_ref(struct ref_store *ref_store,
 {
        struct packed_ref_store *refs =
                packed_downcast(ref_store, REF_STORE_READ, "read_raw_ref");
-
-       struct ref_entry *entry;
+       struct packed_ref_cache *packed_refs = get_packed_ref_cache(refs);
+       const char *rec;
 
        *type = 0;
 
-       entry = get_packed_ref(refs, refname);
-       if (!entry) {
+       rec = find_reference_location(packed_refs, refname, 1);
+
+       if (!rec) {
+               /* refname is not a packed reference. */
                errno = ENOENT;
                return -1;
        }
 
-       hashcpy(sha1, entry->u.value.oid.hash);
+       if (get_sha1_hex(rec, sha1))
+               die_invalid_line(refs->path, rec, packed_refs->eof - rec);
+
        *type = REF_ISPACKED;
        return 0;
 }