Re: [RFC/WIP PATCH 09/11] transport: get_refs_via_connect exchanges capabilities before refs.
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- May 27, 2015, 05:37 UTC
- Message-ID
- <CAPig+cQ-qUZs+KfOCXvRwTBWJe7Kx6RiEmiPphQVyx3=mxpVQw@mail.gmail.com>
- In-Reply-To
- <1432677675-5118-10-git-send-email-sbeller@google.com>
On Tue, May 26, 2015 at 6:01 PM, Stefan Beller <sbeller@google.com> wrote:
> transport: get_refs_via_connect exchanges capabilities before refs.
s/exchanges/exchange/ s/\.$//
Show 49 quoted lines
> Signed-off-by: Stefan Beller <sbeller@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