]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-object-info: request all supported options dynamically
authorPablo Sabater <pabloosabaterr@gmail.com>
Fri, 31 Jul 2026 19:49:34 +0000 (21:49 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 31 Jul 2026 22:02:09 +0000 (15:02 -0700)
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 <karthik.188@gmail.com>
Mentored-by: Chandra Pratap <chandrapratap3519@gmail.com>
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-object-info.c

index ba7e179c44ee54c59910dd60d40942a31b60c916..ec8a80b3bea9b8fed5dfd47abe006d1d48a850eb 100644 (file)
 static void send_object_info_request(const int fd_out, struct object_info_args *args)
 {
        struct strbuf req_buf = STRBUF_INIT;
+       struct string_list_item *item;
 
        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 has already been checked to only contain valid and
+        * supported fields, so just request everything remaining on it.
+        */
+       for_each_string_list_item(item, args->object_info_options)
+               packet_buf_write(&req_buf, "%s", item->string);
 
        if (args->oids)
                for (size_t i = 0; i < args->oids->nr; i++)