aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin-fetch.c2
-rw-r--r--builtin-push.c2
-rw-r--r--transport.c23
-rw-r--r--transport.h4
4 files changed, 20 insertions, 11 deletions
diff --git a/builtin-fetch.c b/builtin-fetch.c
index 8b0fdbe90..300d5635b 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 f496b4600..7d7e826a3 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 5eabe8de0..7f94d30f9 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 f2bbdf778..6a95d6605 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 */