]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-object-info: parse type from server response
authorPablo Sabater <pabloosabaterr@gmail.com>
Fri, 31 Jul 2026 19:49:37 +0000 (21:49 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 31 Jul 2026 22:02:10 +0000 (15:02 -0700)
The server can handle type requests but does not advertise the
capability yet. Prepare the client to know how to parse the server
response once the server advertises the capability.

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 ec8a80b3bea9b8fed5dfd47abe006d1d48a850eb..0f6d0631641e3eba18c28aefc785b1fb42fddc90 100644 (file)
@@ -53,6 +53,7 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
                      const int stateless_rpc, const int fd_out)
 {
        int size_index = -1;
+       int type_index = -1;
 
        switch (version) {
        case protocol_v2:
@@ -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));
                } 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");