]> git.ipfire.org Git - thirdparty/git.git/commitdiff
connect: make write_fetch_command_and_capabilities() more generic
authorPablo Sabater <pabloosabaterr@gmail.com>
Fri, 24 Jul 2026 10:54:18 +0000 (12:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Jul 2026 15:46:59 +0000 (08:46 -0700)
Refactor write_fetch_command_and_capabilities(), enabling it to serve
both fetch and additional commands.

In this context, "command" refers to the "operations" supported by
Git's wire protocol Documentation/gitprotocol-v2.adoc, such as a Git
subcommand (e.g., git-fetch(1)) or a server-side operation like
"object-info" as implemented in commit a2ba162cda
(object-info: support for retrieving object info, 2021-04-20).

Refactor the function signature to accept a command instead of the
hardcoded "fetch".

Helped-by: Jonathan Tan <jonathantanmy@google.com>
Helped-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Calvin Wan <calvinwan@google.com>
Signed-off-by: Eric Ju <eric.peijian@gmail.com>
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
connect.c
connect.h
fetch-pack.c

index c09947cc5615bcb67d0099d6049750d7d8454ce7..127ed4a2e6b4c08f5e14cf9ca6ad9b1fcffffd8c 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -700,16 +700,16 @@ int server_supports(const char *feature)
        return !!server_feature_value(feature, NULL);
 }
 
-void write_fetch_command_and_capabilities(struct strbuf *req_buf,
-                                         const struct string_list *server_options)
+void write_command_and_capabilities(struct strbuf *req_buf, const char *command,
+                                   const struct string_list *server_options)
 {
        const char *hash_name;
        int advertise_sid = 0;
 
        repo_config_get_bool(the_repository, "transfer.advertisesid", &advertise_sid);
 
-       ensure_server_supports_v2("fetch");
-       packet_buf_write(req_buf, "command=fetch");
+       ensure_server_supports_v2(command);
+       packet_buf_write(req_buf, "command=%s", command);
        if (server_supports_v2("agent"))
                packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
        if (advertise_sid && server_supports_v2("session-id"))
index c4f6ea4b0adcbfb6ea7117afedd0ae177120b353..957e5fe2b9eccb73df80a1f2ad659b8ef0edc786 100644 (file)
--- a/connect.h
+++ b/connect.h
@@ -35,7 +35,11 @@ void check_stateless_delimiter(int stateless_rpc,
                               const char *error);
 
 struct string_list;
-void write_fetch_command_and_capabilities(struct strbuf *req_buf,
-                                         const struct string_list *server_options);
+/*
+ * Write a protocol v2 command request, along with the capability
+ * advertisements, into req_buf.
+ */
+void write_command_and_capabilities(struct strbuf *req_buf, const char *command,
+                                   const struct string_list *server_options);
 
 #endif
index f7789e8456eb38e6ab634d29b33de43461f268c9..3695059cd55b03e238ed7917ec4afe3e6bd520f2 100644 (file)
@@ -1386,7 +1386,7 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
        int done_sent = 0;
        struct strbuf req_buf = STRBUF_INIT;
 
-       write_fetch_command_and_capabilities(&req_buf, args->server_options);
+       write_command_and_capabilities(&req_buf, "fetch", args->server_options);
 
        if (args->use_thin_pack)
                packet_buf_write(&req_buf, "thin-pack");
@@ -2253,7 +2253,7 @@ void negotiate_using_fetch(const struct oid_array *negotiation_restrict_tips,
                                           the_repository, "%d",
                                           negotiation_round);
                strbuf_reset(&req_buf);
-               write_fetch_command_and_capabilities(&req_buf, server_options);
+               write_command_and_capabilities(&req_buf, "fetch", server_options);
 
                packet_buf_write(&req_buf, "wait-for-done");