]> git.ipfire.org Git - thirdparty/git.git/commitdiff
transport: add a hash algorithm member
authorbrian m. carlson <sandals@crustytoothpaste.net>
Mon, 25 May 2020 19:58:55 +0000 (19:58 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 May 2020 17:07:06 +0000 (10:07 -0700)
When connecting to a remote system, we need to know what hash algorithm
it will be using to talk to us.  Add a hash_algo member to struct
transport and add a function to read this data from the transport
object.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
transport.c
transport.h

index 15f5ba4e8f22c69959357bc8a7fe073678fe8862..b43d985f90f9267688d064ba2fb5fcf0a2c366d2 100644 (file)
@@ -311,6 +311,7 @@ static struct ref *handshake(struct transport *transport, int for_push,
                BUG("unknown protocol version");
        }
        data->got_remote_heads = 1;
+       transport->hash_algo = reader.hash_algo;
 
        if (reader.line_peeked)
                BUG("buffer must be empty at the end of handshake()");
@@ -996,9 +997,16 @@ struct transport *transport_get(struct remote *remote, const char *url)
                        ret->smart_options->receivepack = remote->receivepack;
        }
 
+       ret->hash_algo = &hash_algos[GIT_HASH_SHA1];
+
        return ret;
 }
 
+const struct git_hash_algo *transport_get_hash_algo(struct transport *transport)
+{
+       return transport->hash_algo;
+}
+
 int transport_set_option(struct transport *transport,
                         const char *name, const char *value)
 {
index 4298c855be66bb41c41053a1ca9fced7b077a389..2a9f96c05a664cb6f77dc7fca39b750e2d4d7417 100644 (file)
@@ -115,6 +115,8 @@ struct transport {
        struct git_transport_options *smart_options;
 
        enum transport_family family;
+
+       const struct git_hash_algo *hash_algo;
 };
 
 #define TRANSPORT_PUSH_ALL                     (1<<0)
@@ -243,6 +245,12 @@ int transport_push(struct repository *repo,
 const struct ref *transport_get_remote_refs(struct transport *transport,
                                            const struct argv_array *ref_prefixes);
 
+/*
+ * Fetch the hash algorithm used by a remote.
+ *
+ * This can only be called after fetching the remote refs.
+ */
+const struct git_hash_algo *transport_get_hash_algo(struct transport *transport);
 int transport_fetch_refs(struct transport *transport, struct ref *refs);
 void transport_unlock_pack(struct transport *transport);
 int transport_disconnect(struct transport *transport);