Subject: Re: [RFC PATCH v2 3/8] Support taking over transports

From: "Shawn O. Pearce" <[email-masked]>
Date: Fri, 4 Dec 2009 10:27:53 -0800

Ilari Liusvaara <[email-masked]> wrote:
> Add support for taking over transports that turn out to be smart.

I really don't like this disown strategy and its magic ref return
value from fetch.
 
> @@ -1020,7 +1089,13 @@ int transport_fetch_refs(struct transport *transport, struct ref *refs)
>  			heads[nr_heads++] = rm;
>  	}
>  
> +retry:
>  	rc = transport->fetch(transport, nr_heads, heads);
> +	if(rc == TRANSPORT_LAYER6_READY) {
> +		git_take_over_transport(transport);
> +		goto retry;
> +	}

Why can't you expose git_take_over_transport as a public function
and then the transport-helper.c code can instead do:

	... setup connect with helper ...
	transport_takeover(transport, child);
	return transport->fetch(....);

Would this make the code simpler?

-- 
Shawn.