oid-array: teach oid-array to handle multiple kinds of oids

While looking at how to handle input of both SHA-1 and SHA-256 oids in
get_oid_with_context, I realized that the oid_array in
repo_for_each_abbrev might have more than one kind of oid stored in it
simultaneously.

Update to oid_array_append to ensure that oids added to an oid array
always have an algorithm set.

Update void_hashcmp to first verify two oids use the same hash algorithm
before comparing them to each other.

With that oid-array should be safe to use with different kinds of
oids simultaneously.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Eric W. Biederman 2023-10-01 21:40:06 -05:00 committed by Junio C Hamano
parent 5e9d802a33
commit d50cbe4a5d
1 changed files with 10 additions and 2 deletions

View File

@ -6,12 +6,20 @@ void oid_array_append(struct oid_array *array, const struct object_id *oid)
{
ALLOC_GROW(array->oid, array->nr + 1, array->alloc);
oidcpy(&array->oid[array->nr++], oid);
if (!oid->algo)
oid_set_algo(&array->oid[array->nr - 1], the_hash_algo);
array->sorted = 0;
}
static int void_hashcmp(const void *a, const void *b)
static int void_hashcmp(const void *va, const void *vb)
{
return oidcmp(a, b);
const struct object_id *a = va, *b = vb;
int ret;
if (a->algo == b->algo)
ret = oidcmp(a, b);
else
ret = a->algo > b->algo ? 1 : -1;
return ret;
}
void oid_array_sort(struct oid_array *array)