@ -545,14 +545,13 @@ static int fetch_with_import(struct transport *transport,
return 0;
return 0;
}
}
static int process_connect_service(struct transport *transport,
static int run_connect(struct transport *transport, struct strbuf *cmdbuf)
const char *name, const char *exec)
{
{
struct helper_data *data = transport->data;
struct helper_data *data = transport->data;
struct strbuf cmdbuf = STRBUF_INIT;
int ret = 0;
struct child_process *helper;
int duped;
int r, duped, ret = 0;
FILE *input;
FILE *input;
struct child_process *helper;
helper = get_helper(transport);
helper = get_helper(transport);
@ -568,44 +567,54 @@ static int process_connect_service(struct transport *transport,
input = xfdopen(duped, "r");
input = xfdopen(duped, "r");
setvbuf(input, NULL, _IONBF, 0);
setvbuf(input, NULL, _IONBF, 0);
sendline(data, cmdbuf);
if (recvline_fh(input, cmdbuf))
exit(128);
if (!strcmp(cmdbuf->buf, "")) {
data->no_disconnect_req = 1;
if (debug)
fprintf(stderr, "Debug: Smart transport connection "
"ready.\n");
ret = 1;
} else if (!strcmp(cmdbuf->buf, "fallback")) {
if (debug)
fprintf(stderr, "Debug: Falling back to dumb "
"transport.\n");
} else {
die("Unknown response to connect: %s",
cmdbuf->buf);
}
fclose(input);
return ret;
}
static int process_connect_service(struct transport *transport,
const char *name, const char *exec)
{
struct helper_data *data = transport->data;
struct strbuf cmdbuf = STRBUF_INIT;
int ret = 0;
/*
/*
* Handle --upload-pack and friends. This is fire and forget...
* Handle --upload-pack and friends. This is fire and forget...
* just warn if it fails.
* just warn if it fails.
*/
*/
if (strcmp(name, exec)) {
if (strcmp(name, exec)) {
r = set_helper_option(transport, "servpath", exec);
int r = set_helper_option(transport, "servpath", exec);
if (r > 0)
if (r > 0)
warning("Setting remote service path not supported by protocol.");
warning("Setting remote service path not supported by protocol.");
else if (r < 0)
else if (r < 0)
warning("Invalid remote service path.");
warning("Invalid remote service path.");
}
}
if (data->connect)
if (data->connect) {
strbuf_addf(&cmdbuf, "connect %s\n", name);
strbuf_addf(&cmdbuf, "connect %s\n", name);
else
ret = run_connect(transport, &cmdbuf);
goto exit;
}
sendline(data, &cmdbuf);
if (recvline_fh(input, &cmdbuf))
exit(128);
if (!strcmp(cmdbuf.buf, "")) {
data->no_disconnect_req = 1;
if (debug)
fprintf(stderr, "Debug: Smart transport connection "
"ready.\n");
ret = 1;
} else if (!strcmp(cmdbuf.buf, "fallback")) {
if (debug)
fprintf(stderr, "Debug: Falling back to dumb "
"transport.\n");
} else
die("Unknown response to connect: %s",
cmdbuf.buf);
exit:
strbuf_release(&cmdbuf);
strbuf_release(&cmdbuf);
fclose(input);
return ret;
return ret;
}
}