transport-helper: refactor process_connect_service

A future patch will need to take advantage of the logic which runs and
processes the response of the connect command on a remote helper so
factor out this logic from 'process_connect_service()' and place it into
a helper function 'run_connect()'.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Brandon Williams 2018-03-15 10:31:33 -07:00 коммит произвёл Junio C Hamano
Родитель b1c2edfc18
Коммит 176e85c1b4
1 изменённых файлов: 38 добавлений и 29 удалений

Просмотреть файл

@ -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;
} }