[PATCH v3 10/44] connect: add function to detect supported v1 hash functions
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- Jun 19, 2020, 17:55 UTC
- Message-ID
- <20200619175601.569856-11-sandals@crustytoothpaste.net>
- In-Reply-To
- <20200619175601.569856-1-sandals@crustytoothpaste.net>
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> --- connect.c | 22 ++++++++++++++++++++++ connect.h | 1 + 2 files changed, 23 insertions(+)
diff --git a/connect.c b/connect.c index 2cded78b0a..a52b038865 100644 --- a/connect.c +++ b/connect.c @@ -527,6 +527,28 @@ static const char *parse_feature_value(const char *feature_list, const char *fea 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) { return !!parse_feature_value(feature_list, feature, NULL, NULL); diff --git a/connect.h b/connect.h index 88702fdd17..c53976f7ec 100644 --- a/connect.h +++ b/connect.h @@ -18,6 +18,7 @@ int url_is_local_not_ssh(const char *url); struct packet_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_feature_v2(const char *c, const char **v); int server_supports_feature(const char *c, const char *feature,