Re: [PATCH GSoC v2 4/6] fetch-object-info: parse type from server response
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 1, 2026, 05:04 UTC
- Message-ID
- <xmqq7bmaa0sw.fsf@gitster.g>
- In-Reply-To
- <20260731-objecttype-support-v2-4-af577461ed57@gmail.com>
Pablo Sabater <pabloosabaterr@gmail.com> writes:
Show 9 quoted lines
> @@ -104,8 +105,13 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
> for (size_t j = 0; j < args->oids->nr; j++)
> object_info_data[j].sizep =
> xcalloc(1, sizeof(*object_info_data[j].sizep));
> + } else if (!strcmp(reader->line, "type")) {
> + type_index = (int)i;
> + for (size_t j = 0; j < args->oids->nr; j++)
> + object_info_data[j].typep =
> + xcalloc(1, sizeof(*object_info_data[j].typep));Do object_info_data[j].typep and object_info_data[k].typep need to be independently freeable? Separate allocations by calling calloc args->oids->nr times would allow that, but if there is no such need, nr contiguous allocation of them,
enum object_type *types;
*types = xcalloc(args->oids->nr, sizeof(*types)); for (size_t j = 0; j < args->oids->nr; j++) object_info_data[j].typep = &types[j];
would be simpler to manage and easier to get rid of once you are done.
Show 17 quoted lines
> } else {
> - BUG("only size is supported");
> + BUG("unexpected object-info option: %s", reader->line);
> }
> }
>
> @@ -151,6 +157,10 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
> object_info_values.items[0].string,
> object_info_values.items[size_index + 1].string);
>
> + if (type_index >= 0)
> + *object_info_data[i].typep =
> + type_from_string(object_info_values.items[type_index + 1].string);
> +
> string_list_clear(&object_info_values, 0);
> }
> check_stateless_delimiter(stateless_rpc, reader, "stateless delimiter expected");