refs: pass repo when peeling objects

Both `peel_object()` and `peel_iterated_oid()` implicitly rely on
`the_repository` to look up objects. Despite the fact that we want to
get rid of `the_repository`, it also leads to some restrictions in our
ref iterators when trying to retrieve the peeled value for a repository
other than `the_repository`.

Refactor these functions such that both take a repository as argument
and remove the now-unnecessary restrictions.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2024-05-17 10:19:04 +02:00
committed by Junio C Hamano
parent 19c76e8235
commit 30aaff437f
20 changed files with 37 additions and 36 deletions

View File

@ -207,12 +207,14 @@ struct object *lookup_object_by_type(struct repository *r,
}
}
enum peel_status peel_object(const struct object_id *name, struct object_id *oid)
enum peel_status peel_object(struct repository *r,
const struct object_id *name,
struct object_id *oid)
{
struct object *o = lookup_unknown_object(the_repository, name);
struct object *o = lookup_unknown_object(r, name);
if (o->type == OBJ_NONE) {
int type = oid_object_info(the_repository, name, NULL);
int type = oid_object_info(r, name, NULL);
if (type < 0 || !object_as_type(o, type, 0))
return PEEL_INVALID;
}
@ -220,7 +222,7 @@ enum peel_status peel_object(const struct object_id *name, struct object_id *oid
if (o->type != OBJ_TAG)
return PEEL_NON_TAG;
o = deref_tag_noverify(o);
o = deref_tag_noverify(r, o);
if (!o)
return PEEL_INVALID;