diff options
-rw-r--r-- | builtin-fetch.c | 2 | ||||
-rw-r--r-- | builtin-push.c | 2 | ||||
-rw-r--r-- | transport.c | 23 | ||||
-rw-r--r-- | transport.h | 4 |
4 files changed, 20 insertions, 11 deletions
diff --git a/builtin-fetch.c b/builtin-fetch.c index 8b0fdbe905..300d5635b0 100644 --- a/builtin-fetch.c +++ b/builtin-fetch.c @@ -496,7 +496,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) else remote = remote_get(argv[i++]); - transport = transport_get(remote, remote->uri[0], 1); + transport = transport_get(remote, remote->uri[0]); if (verbose >= 2) transport->verbose = 1; if (quiet) diff --git a/builtin-push.c b/builtin-push.c index f496b46007..7d7e826a39 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -59,7 +59,7 @@ static int do_push(const char *repo, int flags) errs = 0; for (i = 0; i < remote->uri_nr; i++) { struct transport *transport = - transport_get(remote, remote->uri[i], 0); + transport_get(remote, remote->uri[i]); int err; if (receivepack) transport_set_option(transport, diff --git a/transport.c b/transport.c index 5eabe8de0b..7f94d30f95 100644 --- a/transport.c +++ b/transport.c @@ -174,6 +174,14 @@ static struct ref *get_refs_via_curl(const struct transport *transport) return refs; } +static int fetch_objs_via_curl(struct transport *transport, + int nr_objs, struct ref **to_fetch) +{ + if (!transport->data) + transport->data = get_http_walker(transport->url); + return fetch_objs_via_walker(transport, nr_objs, to_fetch); +} + #else static struct ref *get_refs_via_curl(const struct transport *transport) @@ -182,12 +190,19 @@ static struct ref *get_refs_via_curl(const struct transport *transport) return NULL; } +static int fetch_objs_via_curl(struct transport *transport, + int nr_objs, struct ref **to_fetch) +{ + die("Cannot fetch from '%s' without curl ...", transport->url); + return -1; +} + #endif static const struct transport_ops curl_transport = { /* set_option */ NULL, /* get_refs_list */ get_refs_via_curl, - /* fetch */ fetch_objs_via_walker, + /* fetch */ fetch_objs_via_curl, /* push */ curl_transport_push, /* disconnect */ disconnect_walker }; @@ -408,14 +423,12 @@ static int is_file(const char *url) return S_ISREG(buf.st_mode); } -struct transport *transport_get(struct remote *remote, const char *url, - int fetch) +struct transport *transport_get(struct remote *remote, const char *url) { struct transport *ret = xcalloc(1, sizeof(*ret)); ret->remote = remote; ret->url = url; - ret->fetch = !!fetch; if (!prefixcmp(url, "rsync://")) { ret->ops = &rsync_transport; @@ -423,8 +436,6 @@ struct transport *transport_get(struct remote *remote, const char *url, || !prefixcmp(url, "https://") || !prefixcmp(url, "ftp://")) { ret->ops = &curl_transport; - if (fetch) - ret->data = get_http_walker(url); } else if (is_local(url) && is_file(url)) { struct bundle_transport_data *data = xcalloc(1, sizeof(*data)); ret->data = data; diff --git a/transport.h b/transport.h index f2bbdf778a..6a95d66053 100644 --- a/transport.h +++ b/transport.h @@ -6,7 +6,6 @@ struct transport { unsigned verbose : 1; - unsigned fetch : 1; struct remote *remote; const char *url; @@ -38,8 +37,7 @@ struct transport_ops { }; /* Returns a transport suitable for the url */ -struct transport *transport_get(struct remote *remote, const char *url, - int fetch); +struct transport *transport_get(struct remote *, const char *); /* Transport options which apply to git:// and scp-style URLs */ |