[PATCH 1/4] connect: refactor building of Extra Parameters
From: Jonathan Tan <hidden>
Date: 2020-11-03 00:27:12
Subsystem:
the rest · Maintainer:
Linus Torvalds
Build the Extra Parameters string ("version=%d") in only one place
(git_connect()) instead of two (git_connect() and push_ssh_options()).
This is in preparation for a subsequent patch, which will change how the
Extra Parameters are built.
Signed-off-by: Jonathan Tan <redacted>
---
connect.c | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/connect.c b/connect.c
index 8b8f56cf6d..5221f1764c 100644
--- a/connect.c
+++ b/connect.c@@ -1201,14 +1201,13 @@ static struct child_process *git_connect_git(int fd[2], char *hostandport, */ static void push_ssh_options(struct strvec *args, struct strvec *env, enum ssh_variant variant, const char *port, - enum protocol_version version, int flags) + const char *extra_parameters, int flags) { - if (variant == VARIANT_SSH && - version > 0) { + if (variant == VARIANT_SSH && extra_parameters) { strvec_push(args, "-o"); strvec_push(args, "SendEnv=" GIT_PROTOCOL_ENVIRONMENT); - strvec_pushf(env, GIT_PROTOCOL_ENVIRONMENT "=version=%d", - version); + strvec_pushf(env, GIT_PROTOCOL_ENVIRONMENT "=%s", + extra_parameters); } if (flags & CONNECT_IPV4) {
@@ -1261,7 +1260,7 @@ static void push_ssh_options(struct strvec *args, struct strvec *env, /* Prepare a child_process for use by Git's SSH-tunneled transport. */ static void fill_ssh_args(struct child_process *conn, const char *ssh_host, - const char *port, enum protocol_version version, + const char *port, const char *extra_parameters, int flags) { const char *ssh;
@@ -1296,14 +1295,14 @@ static void fill_ssh_args(struct child_process *conn, const char *ssh_host, strvec_push(&detect.args, ssh); strvec_push(&detect.args, "-G"); push_ssh_options(&detect.args, &detect.env_array, - VARIANT_SSH, port, version, flags); + VARIANT_SSH, port, extra_parameters, flags); strvec_push(&detect.args, ssh_host); variant = run_command(&detect) ? VARIANT_SIMPLE : VARIANT_SSH; } strvec_push(&conn->args, ssh); - push_ssh_options(&conn->args, &conn->env_array, variant, port, version, flags); + push_ssh_options(&conn->args, &conn->env_array, variant, port, extra_parameters, flags); strvec_push(&conn->args, ssh_host); }
@@ -1352,6 +1351,7 @@ struct child_process *git_connect(int fd[2], const char *url, } else { struct strbuf cmd = STRBUF_INIT; const char *const *var; + struct strbuf extra_parameters = STRBUF_INIT; conn = xmalloc(sizeof(*conn)); child_process_init(conn);
@@ -1367,6 +1367,9 @@ struct child_process *git_connect(int fd[2], const char *url, for (var = local_repo_env; *var; var++) strvec_push(&conn->env_array, *var); + if (version > 0) + strbuf_addf(&extra_parameters, "version=%d", version); + conn->use_shell = 1; conn->in = conn->out = -1; if (protocol == PROTO_SSH) {
@@ -1392,15 +1395,16 @@ struct child_process *git_connect(int fd[2], const char *url, return NULL; } conn->trace2_child_class = "transport/ssh"; - fill_ssh_args(conn, ssh_host, port, version, flags); + fill_ssh_args(conn, ssh_host, port, + extra_parameters.len ? extra_parameters.buf : NULL, + flags); } else { transport_check_allowed("file"); conn->trace2_child_class = "transport/file"; - if (version > 0) { + if (extra_parameters.len) strvec_pushf(&conn->env_array, - GIT_PROTOCOL_ENVIRONMENT "=version=%d", - version); - } + GIT_PROTOCOL_ENVIRONMENT "=%s", + extra_parameters.buf); } strvec_push(&conn->args, cmd.buf);
@@ -1409,6 +1413,7 @@ struct child_process *git_connect(int fd[2], const char *url, fd[0] = conn->out; /* read from child's stdout */ fd[1] = conn->in; /* write to child's stdin */ + strbuf_release(&extra_parameters); strbuf_release(&cmd); } free(hostandport);
--
2.29.1.341.ge80a0c044ae-goog