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 <jonathantanmy@xxxxxxxxxx> --- 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