diff options
author | Ilari Liusvaara <ilari.liusvaara@elisanet.fi> | 2010-01-27 19:53:17 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-27 12:05:04 -0800 |
commit | 4da504608ea94fbcac65eb287d8d5791bddefd88 (patch) | |
tree | b539aaa5ab90cd4e8594c456f76fa0fff509bfd2 /transport.c | |
parent | d539de9f25920f099e4e56b0acbb4ebf246ff0f4 (diff) | |
download | git-4da504608ea94fbcac65eb287d8d5791bddefd88.tar.gz |
Fix remote.<remote>.vcs
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@elisanet.fi>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'transport.c')
-rw-r--r-- | transport.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/transport.c b/transport.c index 7714fdb6c6..87581b85a1 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; 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; |