fetch-pack: add a deref_without_lazy_fetch_extended()

Add a version of the deref_without_lazy_fetch function which can be
called with custom oi_flags and to grab information about the
"object_type". This will be used for the bundle-uri client in a
subsequent commit.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Ævar Arnfjörð Bjarmason 2022-05-16 20:11:00 +00:00 committed by Junio C Hamano
parent 9fd512c8d6
commit a6e65fb39c
1 changed files with 18 additions and 7 deletions

View File

@ -115,11 +115,12 @@ static void for_each_cached_alternate(struct fetch_negotiator *negotiator,
cb(negotiator, cache.items[i]); cb(negotiator, cache.items[i]);
} }


static struct commit *deref_without_lazy_fetch(const struct object_id *oid, static struct commit *deref_without_lazy_fetch_extended(const struct object_id *oid,
int mark_tags_complete) int mark_tags_complete,
enum object_type *type,
unsigned int oi_flags)
{ {
enum object_type type; struct object_info info = { .typep = type };
struct object_info info = { .typep = &type };
struct commit *commit; struct commit *commit;


commit = lookup_commit_in_graph(the_repository, oid); commit = lookup_commit_in_graph(the_repository, oid);
@ -128,9 +129,9 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,


while (1) { while (1) {
if (oid_object_info_extended(the_repository, oid, &info, if (oid_object_info_extended(the_repository, oid, &info,
OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK)) oi_flags))
return NULL; return NULL;
if (type == OBJ_TAG) { if (*type == OBJ_TAG) {
struct tag *tag = (struct tag *) struct tag *tag = (struct tag *)
parse_object(the_repository, oid); parse_object(the_repository, oid);


@ -144,7 +145,7 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
} }
} }


if (type == OBJ_COMMIT) { if (*type == OBJ_COMMIT) {
struct commit *commit = lookup_commit(the_repository, oid); struct commit *commit = lookup_commit(the_repository, oid);
if (!commit || repo_parse_commit(the_repository, commit)) if (!commit || repo_parse_commit(the_repository, commit))
return NULL; return NULL;
@ -154,6 +155,16 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
return NULL; return NULL;
} }



static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
int mark_tags_complete)
{
enum object_type type;
unsigned flags = OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK;
return deref_without_lazy_fetch_extended(oid, mark_tags_complete,
&type, flags);
}

static int rev_list_insert_ref(struct fetch_negotiator *negotiator, static int rev_list_insert_ref(struct fetch_negotiator *negotiator,
const struct object_id *oid) const struct object_id *oid)
{ {