fetch-pack: parse and advertise the object-format capability
Parse the server's object-format capability and respond accordingly, dying if there is a mismatch. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9dc78c20dc
commit
4b831208bb
12
fetch-pack.c
12
fetch-pack.c
@ -1179,6 +1179,7 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
|
|||||||
int sideband_all, int seen_ack)
|
int sideband_all, int seen_ack)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
const char *hash_name;
|
||||||
struct strbuf req_buf = STRBUF_INIT;
|
struct strbuf req_buf = STRBUF_INIT;
|
||||||
|
|
||||||
if (server_supports_v2("fetch", 1))
|
if (server_supports_v2("fetch", 1))
|
||||||
@ -1193,6 +1194,17 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
|
|||||||
args->server_options->items[i].string);
|
args->server_options->items[i].string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (server_feature_v2("object-format", &hash_name)) {
|
||||||
|
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_write_fmt(fd_out, "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);
|
packet_buf_delim(&req_buf);
|
||||||
if (args->use_thin_pack)
|
if (args->use_thin_pack)
|
||||||
packet_buf_write(&req_buf, "thin-pack");
|
packet_buf_write(&req_buf, "thin-pack");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user