Jonathan Nieder <jrnieder@xxxxxxxxx> writes: > This puts the determination of options to pass to each ssh variant > (see ssh.variant in git-config(1)) in one place. > > A follow-up patch will use this in an initial dry run to detect which > variant to use when the ssh command is ambiguous. > > No functional change intended yet. > > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > --- > Split out to make patch 6 easier to read, as suggested at > https://public-inbox.org/git/xmqq60b59toe.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxx/. > > Added a function comment to make the purpose and API of this internal > helper clearer. The resulting fill-ssh-args reads a lot nicer. Good. > > connect.c | 65 ++++++++++++++++++++++++++++++++++++--------------------------- > 1 file changed, 37 insertions(+), 28 deletions(-) > > diff --git a/connect.c b/connect.c > index a9dc493db2..d2fbb15cc5 100644 > --- a/connect.c > +++ b/connect.c > @@ -919,6 +919,42 @@ static struct child_process *git_connect_git(int fd[2], char *hostandport, > return conn; > } > > +/* > + * Append the appropriate environment variables to `env` and options to > + * `args` for running ssh in Git's SSH-tunneled transport. > + */ > +static void push_ssh_options(struct argv_array *args, struct argv_array *env, > + enum ssh_variant variant, const char *port, > + int flags) > +{ > + if (variant == VARIANT_SSH && > + get_protocol_version_config() > 0) { > + argv_array_push(args, "-o"); > + argv_array_push(args, "SendEnv=" GIT_PROTOCOL_ENVIRONMENT); > + argv_array_pushf(env, GIT_PROTOCOL_ENVIRONMENT "=version=%d", > + get_protocol_version_config()); > + } > + > + if (variant != VARIANT_SIMPLE) { > + if (flags & CONNECT_IPV4) > + argv_array_push(args, "-4"); > + else if (flags & CONNECT_IPV6) > + argv_array_push(args, "-6"); > + } > + > + if (variant == VARIANT_TORTOISEPLINK) > + argv_array_push(args, "-batch"); > + > + if (port && variant != VARIANT_SIMPLE) { > + if (variant == VARIANT_SSH) > + argv_array_push(args, "-p"); > + else > + argv_array_push(args, "-P"); > + > + argv_array_push(args, port); > + } > +} > + > /* 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, int flags) > @@ -947,34 +983,7 @@ static void fill_ssh_args(struct child_process *conn, const char *ssh_host, > } > > argv_array_push(&conn->args, ssh); > - > - if (variant == VARIANT_SSH && > - get_protocol_version_config() > 0) { > - argv_array_push(&conn->args, "-o"); > - argv_array_push(&conn->args, "SendEnv=" GIT_PROTOCOL_ENVIRONMENT); > - argv_array_pushf(&conn->env_array, GIT_PROTOCOL_ENVIRONMENT "=version=%d", > - get_protocol_version_config()); > - } > - > - if (variant != VARIANT_SIMPLE) { > - if (flags & CONNECT_IPV4) > - argv_array_push(&conn->args, "-4"); > - else if (flags & CONNECT_IPV6) > - argv_array_push(&conn->args, "-6"); > - } > - > - if (variant == VARIANT_TORTOISEPLINK) > - argv_array_push(&conn->args, "-batch"); > - > - if (port && variant != VARIANT_SIMPLE) { > - if (variant == VARIANT_SSH) > - argv_array_push(&conn->args, "-p"); > - else > - argv_array_push(&conn->args, "-P"); > - > - argv_array_push(&conn->args, port); > - } > - > + push_ssh_options(&conn->args, &conn->env_array, variant, port, flags); > argv_array_push(&conn->args, ssh_host); > }