Re: [PATCH GSoC 3/5] fetch-object-info: request all supported options dynamically

Chandra Pratap <[email protected]> Wed, 29 Jul 2026 15:27:34 +0530
Newsgroups org.kernel.vger.git
Message-ID <CA+J6zkQCa-rCJYQgfsjLyyJqrW+0-Z8pUJ4EJxY9HSTkJH=u4A@mail.gmail.com>
On Sat, 25 Jul 2026 at 17:25, Pablo Sabater <[email protected]> wrote:
>
> In send_object_info_request(), size is hardcoded to be the only option
> sent. In order to support type and future capabilities, replace the
> hardcoded size with a loop that requests everything on
> object_info_options list.
>
> This is safe because the list has already been trimmed previously in
> fetch_object_info() to only contain options that the server supports.
>
> Mentored-by: Karthik Nayak <[email protected]>
> Mentored-by: Chandra Pratap <[email protected]>
> Signed-off-by: Pablo Sabater <[email protected]>
> ---
>  fetch-object-info.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/fetch-object-info.c b/fetch-object-info.c
> index cf6b94afb8..e5cfdafe68 100644
> --- a/fetch-object-info.c
> +++ b/fetch-object-info.c
> @@ -15,10 +15,13 @@ static void send_object_info_request(const int fd_out, struct object_info_args *
>
>         write_command_and_capabilities(&req_buf, "object-info", args->server_options);
>
> -       if (unsorted_string_list_has_string(args->object_info_options, "size"))
> -               packet_buf_write(&req_buf, "size");
> -       else if (args->object_info_options->nr)
> -               BUG("only size should be in object_info_options");
> +       /*
> +        * The list is already checked to only request valid and supported fields
> +        * no need to check, just request everything left on the list

Nit: ...valid and supported fields no need to check.. -> valid and
supported fields.
Just request everything remaining on the list.

> +        */
> +       for (size_t i = 0; i < args->object_info_options->nr; i++)
> +               packet_buf_write(&req_buf, "%s",
> +                                args->object_info_options->items[i].string);

Perfect place to use `for_each_string_list_item()`.


>         if (args->oids)
>                 for (size_t i = 0; i < args->oids->nr; i++)
>
> --
> 2.54.0
>