Signed-off-by: Stefan Beller <sbel...@google.com>
---
 transport.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/transport.c b/transport.c
index 33644a6..1cd9b77 100644
--- a/transport.c
+++ b/transport.c
@@ -526,12 +526,33 @@ static struct ref *get_refs_via_connect(struct transport 
*transport, int for_pus
 {
        struct git_transport_data *data = transport->data;
        struct ref *refs;
+       int version = 0;
 
+       if (transport->smart_options)
+               version = transport->smart_options->transport_version;
        connect_setup(transport, for_push, 0);
-       get_remote_heads(data->fd[0], NULL, 0, &refs,
-                        for_push ? REF_NORMAL : 0,
-                        &data->extra_have,
-                        &data->shallow);
+       switch (version) {
+               default: /*
+                         * Configured a protocol version > 2?
+                         * Try version 2 as it's the most future proof.
+                         */
+                       /* fall through */
+               case 2: /* first talk about capabilities, then get the heads */
+                       get_remote_capabilities(data->fd[0], NULL, 0);
+                       request_capabilities(data->fd[1]);
+                       get_remote_heads(data->fd[0], NULL, 0, &refs,
+                                        for_push ? REF_NORMAL : 0,
+                                        &data->extra_have,
+                                        &data->shallow);
+                       break;
+               case 1: /* configured version 1, fall through */
+               case 0: /* unconfigured, use first protocol */
+                       get_remote_heads(data->fd[0], NULL, 0, &refs,
+                                        for_push ? REF_NORMAL : 0,
+                                        &data->extra_have,
+                                        &data->shallow);
+                       break;
+       }
        data->got_remote_heads = 1;
 
        return refs;
-- 
2.4.1.345.gab207b6.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to