ref_store: implement `refs_peel_ref()` generically
[gitweb.git] / refs / packed-backend.c
index abf14a14059cf88b67bc67577e7dd08ad1066dd0..dbbba45502ec7690572e6c3413f5cadebacc5c1a 100644 (file)
@@ -850,60 +850,29 @@ static struct packed_ref_cache *get_packed_ref_cache(struct packed_ref_store *re
        return refs->cache;
 }
 
-static struct ref_dir *get_packed_ref_dir(struct packed_ref_cache *packed_ref_cache)
-{
-       return get_ref_dir(packed_ref_cache->cache->root);
-}
-
-static struct ref_dir *get_packed_refs(struct packed_ref_store *refs)
-{
-       return get_packed_ref_dir(get_packed_ref_cache(refs));
-}
-
-/*
- * Return the ref_entry for the given refname from the packed
- * references.  If it does not exist, return NULL.
- */
-static struct ref_entry *get_packed_ref(struct packed_ref_store *refs,
-                                       const char *refname)
-{
-       return find_ref_entry(get_packed_refs(refs), refname);
-}
-
 static int packed_read_raw_ref(struct ref_store *ref_store,
                               const char *refname, unsigned char *sha1,
                               struct strbuf *referent, unsigned int *type)
 {
        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);
-       *type = REF_ISPACKED;
-       return 0;
-}
+       if (get_sha1_hex(rec, sha1))
+               die_invalid_line(refs->path, rec, packed_refs->eof - rec);
 
-static int packed_peel_ref(struct ref_store *ref_store,
-                          const char *refname, unsigned char *sha1)
-{
-       struct packed_ref_store *refs =
-               packed_downcast(ref_store, REF_STORE_READ | REF_STORE_ODB,
-                               "peel_ref");
-       struct ref_entry *r = get_packed_ref(refs, refname);
-
-       if (!r || peel_entry(r, 0))
-               return -1;
-
-       hashcpy(sha1, r->u.value.peeled.hash);
+       *type = REF_ISPACKED;
        return 0;
 }
 
@@ -1593,7 +1562,6 @@ struct ref_storage_be refs_be_packed = {
        packed_initial_transaction_commit,
 
        packed_pack_refs,
-       packed_peel_ref,
        packed_create_symref,
        packed_delete_refs,
        packed_rename_ref,