ref_store: implement refs_peel_ref() generically

We're about to stop storing packed refs in a `ref_cache`. That means
that the only way we have left to optimize `peel_ref()` is by checking
whether the reference being peeled is the one currently being iterated
over (in `current_ref_iter`), and if so, using `ref_iterator_peel()`.
But this can be done generically; it doesn't have to be implemented
per-backend.

So implement `refs_peel_ref()` in `refs.c` and remove the `peel_ref()`
method from the refs API.

This removes the last callers of a couple of functions, so delete
them. More cleanup to come...

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty
2017-09-25 10:00:14 +02:00
committed by Junio C Hamano
parent f3987ab36d
commit ba1c052fa6
4 changed files with 17 additions and 78 deletions

View File

@ -850,26 +850,6 @@ 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)
@ -896,21 +876,6 @@ static int packed_read_raw_ref(struct ref_store *ref_store,
return 0;
}
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);
return 0;
}
struct packed_ref_iterator {
struct ref_iterator base;
@ -1597,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,