connect: add function to detect supported v1 hash functions
Add a function, server_supports_hash, to see if the remote server supports a particular hash algorithm when speaking protocol v1. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
7c97af4d64
commit
122037c2ed
22
connect.c
22
connect.c
@ -511,6 +511,28 @@ static const char *parse_feature_value(const char *feature_list, const char *fea
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int server_supports_hash(const char *desired, int *feature_supported)
|
||||||
|
{
|
||||||
|
int offset = 0;
|
||||||
|
int len;
|
||||||
|
const char *hash;
|
||||||
|
|
||||||
|
hash = next_server_feature_value("object-format", &len, &offset);
|
||||||
|
if (feature_supported)
|
||||||
|
*feature_supported = !!hash;
|
||||||
|
if (!hash) {
|
||||||
|
hash = hash_algos[GIT_HASH_SHA1].name;
|
||||||
|
len = strlen(hash);
|
||||||
|
}
|
||||||
|
while (hash) {
|
||||||
|
if (!xstrncmpz(desired, hash, len))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
hash = next_server_feature_value("object-format", &len, &offset);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int parse_feature_request(const char *feature_list, const char *feature)
|
int parse_feature_request(const char *feature_list, const char *feature)
|
||||||
{
|
{
|
||||||
return !!parse_feature_value(feature_list, feature, NULL, NULL);
|
return !!parse_feature_value(feature_list, feature, NULL, NULL);
|
||||||
|
@ -18,6 +18,7 @@ int url_is_local_not_ssh(const char *url);
|
|||||||
struct packet_reader;
|
struct packet_reader;
|
||||||
enum protocol_version discover_version(struct packet_reader *reader);
|
enum protocol_version discover_version(struct packet_reader *reader);
|
||||||
|
|
||||||
|
int server_supports_hash(const char *desired, int *feature_supported);
|
||||||
int server_supports_v2(const char *c, int die_on_error);
|
int server_supports_v2(const char *c, int die_on_error);
|
||||||
int server_feature_v2(const char *c, const char **v);
|
int server_feature_v2(const char *c, const char **v);
|
||||||
int server_supports_feature(const char *c, const char *feature,
|
int server_supports_feature(const char *c, const char *feature,
|
||||||
|
Reference in New Issue
Block a user