Since the curl transport is now launched by the transport-helper mechanism, it makes sense to move the remaining curl-related code (i.e. curl_transport_push()) from transport.c into transport-helper.c. The patch also consolidates the two transport_helper_init() call sites ("foreign" helper and curl helper). Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> --- transport-helper.c | 39 +++++++++++++++++++++++++++++++++++++++ transport.c | 48 ++++++------------------------------------------ 2 files changed, 45 insertions(+), 42 deletions(-) diff --git a/transport-helper.c b/transport-helper.c index a901630..d3ce984 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -249,6 +249,34 @@ static struct ref *get_refs_list(struct transport *transport, int for_push) return ret; } +#ifndef NO_CURL +static int curl_transport_push(struct transport *transport, int refspec_nr, const char **refspec, int flags) +{ + const char **argv; + int argc; + + if (flags & TRANSPORT_PUSH_MIRROR) + return error("http transport does not support mirror mode"); + + argv = xmalloc((refspec_nr + 12) * sizeof(char *)); + argv[0] = "http-push"; + argc = 1; + if (flags & TRANSPORT_PUSH_ALL) + argv[argc++] = "--all"; + if (flags & TRANSPORT_PUSH_FORCE) + argv[argc++] = "--force"; + if (flags & TRANSPORT_PUSH_DRY_RUN) + argv[argc++] = "--dry-run"; + if (flags & TRANSPORT_PUSH_VERBOSE) + argv[argc++] = "--verbose"; + argv[argc++] = transport->url; + while (refspec_nr--) + argv[argc++] = *refspec++; + argv[argc] = NULL; + return !!run_command_v_opt(argv, RUN_GIT_CMD); +} +#endif + int transport_helper_init(struct transport *transport) { struct helper_data *data = xcalloc(sizeof(*data), 1); @@ -269,5 +297,16 @@ int transport_helper_init(struct transport *transport) transport->get_refs_list = get_refs_list; transport->fetch = fetch; transport->disconnect = disconnect_helper; + + if (!strcmp(data->name, "http") + || !strcmp(data->name, "https") + || !strcmp(data->name, "ftp")) { +#ifdef NO_CURL + error("git was compiled without libcurl support."); +#else + transport->push = curl_transport_push; +#endif + } + return 0; } diff --git a/transport.c b/transport.c index 26d9999..81a28bc 100644 --- a/transport.c +++ b/transport.c @@ -349,35 +349,6 @@ static int rsync_transport_push(struct transport *transport, return result; } -#ifndef NO_CURL -static int curl_transport_push(struct transport *transport, int refspec_nr, const char **refspec, int flags) -{ - const char **argv; - int argc; - - if (flags & TRANSPORT_PUSH_MIRROR) - return error("http transport does not support mirror mode"); - - argv = xmalloc((refspec_nr + 12) * sizeof(char *)); - argv[0] = "http-push"; - argc = 1; - if (flags & TRANSPORT_PUSH_ALL) - argv[argc++] = "--all"; - if (flags & TRANSPORT_PUSH_FORCE) - argv[argc++] = "--force"; - if (flags & TRANSPORT_PUSH_DRY_RUN) - argv[argc++] = "--dry-run"; - if (flags & TRANSPORT_PUSH_VERBOSE) - argv[argc++] = "--verbose"; - argv[argc++] = transport->url; - while (refspec_nr--) - argv[argc++] = *refspec++; - argv[argc] = NULL; - return !!run_command_v_opt(argv, RUN_GIT_CMD); -} - -#endif - struct bundle_transport_data { int fd; struct bundle_header header; @@ -815,26 +786,19 @@ struct transport *transport_get(struct remote *remote, const char *url) url = remote->url[0]; ret->url = url; - if (remote && remote->foreign_vcs) { - transport_helper_init(ret); - return ret; - } + if (remote && remote->foreign_vcs) + url = NULL; if (url && !prefixcmp(url, "rsync:")) { ret->get_refs_list = get_refs_via_rsync; ret->fetch = fetch_objs_via_rsync; ret->push = rsync_transport_push; - } else if (url - && (!prefixcmp(url, "http://") - || !prefixcmp(url, "https://") - || !prefixcmp(url, "ftp://"))) { + } else if (!url + || !prefixcmp(url, "http://") + || !prefixcmp(url, "https://") + || !prefixcmp(url, "ftp://")) { transport_helper_init(ret); -#ifdef NO_CURL - error("git was compiled without libcurl support."); -#else - ret->push = curl_transport_push; -#endif } else if (url && is_local(url) && is_file(url)) { struct bundle_transport_data *data = xcalloc(1, sizeof(*data)); -- 1.6.4.rc3.138.ga6b98.dirty -- 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