summaryrefslogtreecommitdiff
path: root/transport.c
diff options
context:
space:
mode:
authorBrandon Williams <bmwill@google.com>2018-03-14 18:31:45 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-03-14 21:15:06 (GMT)
commitad6ac1244fd175d08bcee62060a9a0b7975930fb (patch)
tree01a554d284a1f0b8bbba8733e053f43d7739416b /transport.c
parent7e3e479b90fd618fb8eb8222738f7cc53ab288fa (diff)
downloadgit-ad6ac1244fd175d08bcee62060a9a0b7975930fb.zip
git-ad6ac1244fd175d08bcee62060a9a0b7975930fb.tar.gz
git-ad6ac1244fd175d08bcee62060a9a0b7975930fb.tar.bz2
connect: discover protocol version outside of get_remote_heads
In order to prepare for the addition of protocol_v2 push the protocol version discovery outside of 'get_remote_heads()'. This will allow for keeping the logic for processing the reference advertisement for protocol_v1 and protocol_v0 separate from the logic for protocol_v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'transport.c')
-rw-r--r--transport.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/transport.c b/transport.c
index 8e87790..63c3dba 100644
--- a/transport.c
+++ b/transport.c
@@ -18,6 +18,7 @@
#include "sha1-array.h"
#include "sigchain.h"
#include "transport-internal.h"
+#include "protocol.h"
static void set_upstreams(struct transport *transport, struct ref *refs,
int pretend)
@@ -190,13 +191,26 @@ static int connect_setup(struct transport *transport, int for_push)
static struct ref *get_refs_via_connect(struct transport *transport, int for_push)
{
struct git_transport_data *data = transport->data;
- struct ref *refs;
+ struct ref *refs = NULL;
+ struct packet_reader reader;
connect_setup(transport, for_push);
- get_remote_heads(data->fd[0], NULL, 0, &refs,
- for_push ? REF_NORMAL : 0,
- &data->extra_have,
- &data->shallow);
+
+ packet_reader_init(&reader, data->fd[0], NULL, 0,
+ PACKET_READ_CHOMP_NEWLINE |
+ PACKET_READ_GENTLE_ON_EOF);
+
+ switch (discover_version(&reader)) {
+ case protocol_v1:
+ case protocol_v0:
+ get_remote_heads(&reader, &refs,
+ for_push ? REF_NORMAL : 0,
+ &data->extra_have,
+ &data->shallow);
+ break;
+ case protocol_unknown_version:
+ BUG("unknown protocol version");
+ }
data->got_remote_heads = 1;
return refs;