+1
-1
index 13ea7308c8..3c1288a123 100644
--- a/builtin/archive.c
+++ b/builtin/archive.c
_remote = remote_get(remote);
transport = transport_get(_remote, _remote->url.v[0]);
- transport_connect(transport, "git-upload-archive", exec, fd);
+ transport_connect(transport, GIT_CONNECT_UPLOAD_ARCHIVE, exec, fd);
/*
* Inject a fake --format field at the beginning of the
+1
-1
index d9e42bad58..316badd969 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
int flags = args.verbose ? CONNECT_VERBOSE : 0;
if (args.diag_url)
flags |= CONNECT_DIAG_URL;
- conn = git_connect(fd, dest, "git-upload-pack",
+ conn = git_connect(fd, dest, GIT_CONNECT_UPLOAD_PACK,
args.uploadpack, flags);
if (!conn)
return args.diag_url ? 0 : 1;
+3
-2
index 8b81c8a848..1412b49bc8 100644
--- a/builtin/send-pack.c
+++ b/builtin/send-pack.c
fd[0] = 0;
fd[1] = 1;
} else {
- conn = git_connect(fd, dest, "git-receive-pack", receivepack,
- args.verbose ? CONNECT_VERBOSE : 0);
+ conn = git_connect(fd, dest, GIT_CONNECT_RECEIVE_PACK,
+ receivepack,
+ args.verbose ? CONNECT_VERBOSE : 0);
}
packet_reader_init(&reader, fd[0], NULL, 0,
+2
-2
index fcd35c5539..ebc6c552d6 100644
--- a/connect.c
+++ b/connect.c
* the connection failed).
*/
struct child_process *git_connect(int fd[2], const char *url,
- const char *name,
+ enum git_connect_service service,
const char *prog, int flags)
{
char *hostandport, *path;
* fetch, ls-remote, etc), then fallback to v0 since we don't know how
* to do anything else (like push or remote archive) via v2.
*/
- if (version == protocol_v2 && strcmp("git-upload-pack", name))
+ if (version == protocol_v2 && service != GIT_CONNECT_UPLOAD_PACK)
version = protocol_v0;
/* Without this we cannot rely on waitpid() to tell
+6
-1
index 1645126c17..c56ecddc0e 100644
--- a/connect.h
+++ b/connect.h
#define CONNECT_DIAG_URL (1u << 1)
#define CONNECT_IPV4 (1u << 2)
#define CONNECT_IPV6 (1u << 3)
-struct child_process *git_connect(int fd[2], const char *url, const char *name, const char *prog, int flags);
+enum git_connect_service {
+ GIT_CONNECT_UPLOAD_PACK,
+ GIT_CONNECT_RECEIVE_PACK,
+ GIT_CONNECT_UPLOAD_ARCHIVE,
+};
+struct child_process *git_connect(int fd[2], const char *url, enum git_connect_service, const char *prog, int flags);
int finish_connect(struct child_process *conn);
int git_connection_is_socket(struct child_process *conn);
int server_supports(const char *feature);
+30
-13
index 4e5d1d914f..826b35ac8c 100644
--- a/transport-helper.c
+++ b/transport-helper.c
return ret;
}
+static const char *connect_service_cmd(enum git_connect_service service)
+{
+ switch (service) {
+ case GIT_CONNECT_UPLOAD_PACK:
+ return "git-upload-pack";
+ case GIT_CONNECT_RECEIVE_PACK:
+ return "git-receive-pack";
+ case GIT_CONNECT_UPLOAD_ARCHIVE:
+ return "git-upload-archive";
+ }
+ BUG("unknown git_connect_type: %d", service);
+}
+
static int process_connect_service(struct transport *transport,
- const char *name, const char *exec)
+ enum git_connect_service service,
+ const char *exec)
{
struct helper_data *data = transport->data;
struct strbuf cmdbuf = STRBUF_INIT;
* Handle --upload-pack and friends. This is fire and forget...
* just warn if it fails.
*/
- if (strcmp(name, exec)) {
+ if (strcmp(connect_service_cmd(service), exec)) {
int r = set_helper_option(transport, "servpath", exec);
if (r > 0)
warning(_("setting remote service path not supported by protocol"));
}
if (data->connect) {
- strbuf_addf(&cmdbuf, "connect %s\n", name);
+ strbuf_addf(&cmdbuf, "connect %s\n",
+ connect_service_cmd(service));
ret = run_connect(transport, &cmdbuf);
} else if (data->stateless_connect &&
(get_protocol_version_config() == protocol_v2) &&
- (!strcmp("git-upload-pack", name) ||
- !strcmp("git-upload-archive", name))) {
- strbuf_addf(&cmdbuf, "stateless-connect %s\n", name);
+ (service == GIT_CONNECT_UPLOAD_PACK ||
+ service == GIT_CONNECT_UPLOAD_ARCHIVE)) {
+ strbuf_addf(&cmdbuf, "stateless-connect %s\n",
+ connect_service_cmd(service));
ret = run_connect(transport, &cmdbuf);
if (ret)
transport->stateless_rpc = 1;
int for_push)
{
struct helper_data *data = transport->data;
- const char *name;
+ enum git_connect_service service;
const char *exec;
int ret;
- name = for_push ? "git-receive-pack" : "git-upload-pack";
+ service = for_push ? GIT_CONNECT_RECEIVE_PACK : GIT_CONNECT_UPLOAD_PACK;
if (for_push)
exec = data->transport_options.receivepack;
else
exec = data->transport_options.uploadpack;
- ret = process_connect_service(transport, name, exec);
+ ret = process_connect_service(transport, service, exec);
if (ret)
do_take_over(transport);
return ret;
}
-static int connect_helper(struct transport *transport, const char *name,
- const char *exec, int fd[2])
+static int connect_helper(struct transport *transport, enum git_connect_service service,
+ const char *exec, int fd[2])
{
struct helper_data *data = transport->data;
/* Get_helper so connect is inited. */
get_helper(transport);
- if (!process_connect_service(transport, name, exec))
- die(_("can't connect to subservice %s"), name);
+ if (!process_connect_service(transport, service, exec))
+ die(_("can't connect to subservice %s"),
+ connect_service_cmd(service));
fd[0] = data->helper->out;
fd[1] = data->helper->in;
+4
-1
index 90ea749e5c..051f3ab0dc 100644
--- a/transport-internal.h
+++ b/transport-internal.h
#ifndef TRANSPORT_INTERNAL_H
#define TRANSPORT_INTERNAL_H
+#include "connect.h"
+
struct ref;
struct transport;
struct strvec;
* process involved generating new commits.
**/
int (*push_refs)(struct transport *transport, struct ref *refs, int flags);
- int (*connect)(struct transport *connection, const char *name,
+ int (*connect)(struct transport *connection,
+ enum git_connect_service service,
const char *executable, int fd[2]);
/** get_refs_list(), fetch(), and push_refs() can keep
+8
-6
index e53936d87b..f2179057ef 100644
--- a/transport.c
+++ b/transport.c
data->conn = git_connect(data->fd, transport->url,
for_push ?
- "git-receive-pack" :
- "git-upload-pack",
+ GIT_CONNECT_RECEIVE_PACK :
+ GIT_CONNECT_UPLOAD_PACK,
for_push ?
data->options.receivepack :
data->options.uploadpack,
return ret;
}
-static int connect_git(struct transport *transport, const char *name,
+static int connect_git(struct transport *transport,
+ enum git_connect_service service,
const char *executable, int fd[2])
{
struct git_transport_data *data = transport->data;
data->conn = git_connect(data->fd, transport->url,
- name, executable, 0);
+ service, executable, 0);
fd[0] = data->fd[0];
fd[1] = data->fd[1];
return 0;
string_list_clear(&transport->pack_lockfiles, 0);
}
-int transport_connect(struct transport *transport, const char *name,
+int transport_connect(struct transport *transport,
+ enum git_connect_service service,
const char *exec, int fd[2])
{
if (transport->vtable->connect)
- return transport->vtable->connect(transport, name, exec, fd);
+ return transport->vtable->connect(transport, service, exec, fd);
else
die(_("operation not supported by protocol"));
}
+3
-1
index 892f19454a..78e9ea8ad1 100644
--- a/transport.h
+++ b/transport.h
#include "remote.h"
#include "list-objects-filter-options.h"
#include "string-list.h"
+#include "connect.h"
struct git_transport_options {
unsigned thin : 1;
void transport_take_over(struct transport *transport,
struct child_process *child);
-int transport_connect(struct transport *transport, const char *name,
+int transport_connect(struct transport *transport,
+ enum git_connect_service service,
const char *exec, int fd[2]);
/* Transport methods defined outside transport.c */