On Wed, 27 Jan 2010, Ilari Liusvaara wrote: > remote.<remote>.vcs causes remote->foreign_vcs to be set on entry to > transport_get(). Unfortunately, the code assumed that any such entry > is stale from previous round. > > Fix this by making VCS set by URL to be volatile w.r.t. transport_get() > instead. > > Signed-off-by: Ilari Liusvaara <ilari.liusvaara@xxxxxxxxxxx> Except that you missed the "remote == NULL" case (noted below), this is what I was thinking of. Acked-by: Daniel Barkalow <barkalow@xxxxxxxxxxxx> > --- > transport.c | 11 +++++------ > 1 files changed, 5 insertions(+), 6 deletions(-) > > Differences from first round: > > This makes VCS setting apply to all URLs that don't explicitly override, > instead of it applying to just the first one. > > diff --git a/transport.c b/transport.c > index 7714fdb..87581b8 100644 > --- a/transport.c > +++ b/transport.c > @@ -912,20 +912,19 @@ static int external_specification_len(const char *url) > > struct transport *transport_get(struct remote *remote, const char *url) > { > + const char *helper; > struct transport *ret = xcalloc(1, sizeof(*ret)); > > if (!remote) > die("No remote provided to transport_get()"); > > ret->remote = remote; > + helper = remote->foreign_vcs; Needs to be "helper = remote ? remote->foreign_vcs : NULL", for the same reason that the test below had been "remote && remote->foreign_vcs". > > if (!url && remote && remote->url) > url = remote->url[0]; > ret->url = url; > > - /* In case previous URL had helper forced, reset it. */ > - remote->foreign_vcs = NULL; > - > /* maybe it is a foreign URL? */ > if (url) { > const char *p = url; > @@ -933,11 +932,11 @@ struct transport *transport_get(struct remote *remote, const char *url) > while (isalnum(*p)) > p++; > if (!prefixcmp(p, "::")) > - remote->foreign_vcs = xstrndup(url, p - url); > + helper = xstrndup(url, p - url); > } > > - if (remote && remote->foreign_vcs) { > - transport_helper_init(ret, remote->foreign_vcs); > + if (helper) { > + transport_helper_init(ret, helper); > } else if (!prefixcmp(url, "rsync:")) { > ret->get_refs_list = get_refs_via_rsync; > ret->fetch = fetch_objs_via_rsync; > -- > 1.7.0.rc0.19.gb557e6 > > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html