]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-pack: refactor command and capability write
authorJonathan Tan <jonathantanmy@google.com>
Fri, 9 Apr 2021 01:10:01 +0000 (18:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 9 Apr 2021 04:50:22 +0000 (21:50 -0700)
A subsequent commit will need this functionality independent of the rest
of send_fetch_request(), so put this into its own function.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-pack.c

index 128ad47d2a8fbbf254dc0ea0744092bf4e95c419..512fe5450d61baf86613bfc073c7ee54c5d12f95 100644 (file)
@@ -1213,29 +1213,23 @@ static int add_haves(struct fetch_negotiator *negotiator,
        return haves_added;
 }
 
-static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
-                             struct fetch_pack_args *args,
-                             const struct ref *wants, struct oidset *common,
-                             int *haves_to_send, int *in_vain,
-                             int sideband_all, int seen_ack)
+static void write_fetch_command_and_capabilities(struct strbuf *req_buf,
+                                                const struct string_list *server_options)
 {
-       int haves_added;
-       int done_sent = 0;
        const char *hash_name;
-       struct strbuf req_buf = STRBUF_INIT;
 
        if (server_supports_v2("fetch", 1))
-               packet_buf_write(&req_buf, "command=fetch");
+               packet_buf_write(req_buf, "command=fetch");
        if (server_supports_v2("agent", 0))
-               packet_buf_write(&req_buf, "agent=%s", git_user_agent_sanitized());
+               packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
        if (advertise_sid && server_supports_v2("session-id", 0))
-               packet_buf_write(&req_buf, "session-id=%s", trace2_session_id());
-       if (args->server_options && args->server_options->nr &&
+               packet_buf_write(req_buf, "session-id=%s", trace2_session_id());
+       if (server_options && server_options->nr &&
            server_supports_v2("server-option", 1)) {
                int i;
-               for (i = 0; i < args->server_options->nr; i++)
-                       packet_buf_write(&req_buf, "server-option=%s",
-                                        args->server_options->items[i].string);
+               for (i = 0; i < server_options->nr; i++)
+                       packet_buf_write(req_buf, "server-option=%s",
+                                        server_options->items[i].string);
        }
 
        if (server_feature_v2("object-format", &hash_name)) {
@@ -1243,13 +1237,26 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
                if (hash_algo_by_ptr(the_hash_algo) != hash_algo)
                        die(_("mismatched algorithms: client %s; server %s"),
                            the_hash_algo->name, hash_name);
-               packet_buf_write(&req_buf, "object-format=%s", the_hash_algo->name);
+               packet_buf_write(req_buf, "object-format=%s", the_hash_algo->name);
        } else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1) {
                die(_("the server does not support algorithm '%s'"),
                    the_hash_algo->name);
        }
+       packet_buf_delim(req_buf);
+}
+
+static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
+                             struct fetch_pack_args *args,
+                             const struct ref *wants, struct oidset *common,
+                             int *haves_to_send, int *in_vain,
+                             int sideband_all, int seen_ack)
+{
+       int haves_added;
+       int done_sent = 0;
+       struct strbuf req_buf = STRBUF_INIT;
+
+       write_fetch_command_and_capabilities(&req_buf, args->server_options);
 
-       packet_buf_delim(&req_buf);
        if (args->use_thin_pack)
                packet_buf_write(&req_buf, "thin-pack");
        if (args->no_progress)