From: Jeff King Date: Fri, 16 May 2025 04:49:50 +0000 (-0400) Subject: oid_object_info_convert(): stop using string for object type X-Git-Tag: v2.50.0-rc0~13^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b32b434bfe241cde380c5f3aca48a1fdcd86961b;p=thirdparty%2Fgit.git oid_object_info_convert(): stop using string for object type In oid_object_info_convert(), we convert objects between their sha1 and sha256 variants. To do this, we naturally need to know the type, which we get from oid_object_info_extended() using its type_name strbuf option. But getting the value as a string (versus an object_type enum) is not helpful. Since we do not allow unknown types, the regular enum is sufficient. And the resulting code is a bit simpler, as we no longer have to manage the extra allocation nor convert the string to an enum ourselves. Note that at first glance, it might seem like we should retain the error check for "type == -1" to catch bogus types found by the underlying parser. But we don't need it, as an unknown type would have yielded an error from the call to oid_object_info_extended(), which would already have caused us to return an error. In fact, I suspect this was always impossible to trigger. Even when we were converting the string to a type enum ourselves, an invalid type would never have escaped oid_object_info_extended(), since we never passed the (now removed) OBJECT_INFO_ALLOW_UNKNOWN_TYPE option. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff --git a/object-store.c b/object-store.c index 2f51d0e3b0..b8f6955ea7 100644 --- a/object-store.c +++ b/object-store.c @@ -727,7 +727,7 @@ static int oid_object_info_convert(struct repository *r, { const struct git_hash_algo *input_algo = &hash_algos[input_oid->algo]; int do_die = flags & OBJECT_INFO_DIE_IF_CORRUPT; - struct strbuf type_name = STRBUF_INIT; + enum object_type type; struct object_id oid, delta_base_oid; struct object_info new_oi, *oi; unsigned long size; @@ -753,7 +753,7 @@ static int oid_object_info_convert(struct repository *r, if (input_oi->sizep || input_oi->contentp) { new_oi.contentp = &content; new_oi.sizep = &size; - new_oi.type_name = &type_name; + new_oi.typep = &type; } oi = &new_oi; } @@ -766,12 +766,7 @@ static int oid_object_info_convert(struct repository *r, if (new_oi.contentp) { struct strbuf outbuf = STRBUF_INIT; - enum object_type type; - type = type_from_string_gently(type_name.buf, type_name.len, - !do_die); - if (type == -1) - return -1; if (type != OBJ_BLOB) { ret = convert_object_file(the_repository, &outbuf, the_hash_algo, input_algo, @@ -788,10 +783,8 @@ static int oid_object_info_convert(struct repository *r, *input_oi->contentp = content; else free(content); - if (input_oi->type_name) - *input_oi->type_name = type_name; - else - strbuf_release(&type_name); + if (input_oi->typep) + *input_oi->typep = type; } if (new_oi.delta_base_oid == &delta_base_oid) { if (repo_oid_to_algop(r, &delta_base_oid, input_algo,