]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-pack: move write_fetch_command_and_capabilities() to connect.c
authorPablo Sabater <pabloosabaterr@gmail.com>
Fri, 24 Jul 2026 10:54:17 +0000 (12:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Jul 2026 15:46:59 +0000 (08:46 -0700)
In a subsequent commit write_fetch_command_and_capabilities() will be
refactored to a more general-purpose function, making it more accessible
to additional commands in the future.

Move write_fetch_command_and_capabilities() to 'connect.c', where
there are similar purpose functions.

Because string_list is only used as a pointer, use a forward
declaration [1].

[1]: https://lore.kernel.org/git/Z0RIqUAoEob8lGfM@pks.im/

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 47e39d2a7316ae287272e9afb2a3351ab8af2ef6..c09947cc5615bcb67d0099d6049750d7d8454ce7 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -700,6 +700,40 @@ 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)
+{
+       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");
+       if (server_supports_v2("agent"))
+               packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
+       if (advertise_sid && server_supports_v2("session-id"))
+               packet_buf_write(req_buf, "session-id=%s", trace2_session_id());
+       if (server_options && server_options->nr) {
+               ensure_server_supports_v2("server-option");
+               for (size_t 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)) {
+               const unsigned int hash_algo = hash_algo_by_name(hash_name);
+               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);
+       } else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1_LEGACY) {
+               die(_("the server does not support algorithm '%s'"),
+                   the_hash_algo->name);
+       }
+       packet_buf_delim(req_buf);
+}
+
 static const char *url_scheme_name(enum url_scheme scheme)
 {
        switch (scheme) {
index aa482a37fb4da4a60453f31da467685274c9f284..c4f6ea4b0adcbfb6ea7117afedd0ae177120b353 100644 (file)
--- a/connect.h
+++ b/connect.h
@@ -34,4 +34,8 @@ void check_stateless_delimiter(int stateless_rpc,
                               struct packet_reader *reader,
                               const char *error);
 
+struct string_list;
+void write_fetch_command_and_capabilities(struct strbuf *req_buf,
+                                         const struct string_list *server_options);
+
 #endif
index f1e64160fc92a6f1acbfa13d1103b78073e789c6..f7789e8456eb38e6ab634d29b33de43461f268c9 100644 (file)
@@ -1375,40 +1375,6 @@ static int add_haves(struct fetch_negotiator *negotiator,
        return haves_added;
 }
 
-static void write_fetch_command_and_capabilities(struct strbuf *req_buf,
-                                                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");
-       if (server_supports_v2("agent"))
-               packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
-       if (advertise_sid && server_supports_v2("session-id"))
-               packet_buf_write(req_buf, "session-id=%s", trace2_session_id());
-       if (server_options && server_options->nr) {
-               ensure_server_supports_v2("server-option");
-               for (size_t 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)) {
-               const unsigned int hash_algo = hash_algo_by_name(hash_name);
-               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);
-       } else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1_LEGACY) {
-               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,