fetch-pack: move write_fetch_command_and_capabilities() to connect.c
write_fetch_command_and_capabilities() is refactored in a subsequent commit where it becomes 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>next
parent
86804cc595
commit
b6bf80786e
34
connect.c
34
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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
34
fetch-pack.c
34
fetch-pack.c
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue