From: Brandon Williams <bmwill@google.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Stefan Beller <sbeller@google.com>,
Jonathan Tan <jonathantanmy@google.com>,
Segev Finer <segev208@gmail.com>
Subject: Re: [PATCH 4/8] connect: split ssh command line options into separate function
Date: Mon, 20 Nov 2017 13:54:04 -0800 [thread overview]
Message-ID: <20171120215404.GC92506@google.com> (raw)
In-Reply-To: <20171120212505.5t6vzvkfvhmjqwsd@aiede.mtv.corp.google.com>
On 11/20, Jonathan Nieder wrote:
> The git_connect function is growing long. Split the portion that
> discovers an ssh command and options it accepts before the service
> name and path to a separate function to make it easier to read.
>
> No functional change intended.
>
> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> Reviewed-by: Stefan Beller <sbeller@google.com>
> ---
> As before.
>
> connect.c | 116 +++++++++++++++++++++++++++++++++-----------------------------
> 1 file changed, 61 insertions(+), 55 deletions(-)
>
> diff --git a/connect.c b/connect.c
> index 9425229206..a9dc493db2 100644
> --- a/connect.c
> +++ b/connect.c
> @@ -919,6 +919,65 @@ static struct child_process *git_connect_git(int fd[2], char *hostandport,
> return conn;
> }
>
> +/* 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)
> +{
> + const char *ssh;
> + enum ssh_variant variant;
> +
> + if (looks_like_command_line_option(ssh_host))
> + die("strange hostname '%s' blocked", ssh_host);
> +
> + ssh = get_ssh_command();
> + if (ssh) {
> + variant = determine_ssh_variant(ssh, 1);
> + } else {
> + /*
> + * GIT_SSH is the no-shell version of
> + * GIT_SSH_COMMAND (and must remain so for
> + * historical compatibility).
> + */
> + conn->use_shell = 0;
> +
> + ssh = getenv("GIT_SSH");
> + if (!ssh)
> + ssh = "ssh";
> + variant = determine_ssh_variant(ssh, 0);
> + }
> +
> + 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);
> + }
> +
> + argv_array_push(&conn->args, ssh_host);
> +}
> +
> /*
> * This returns the dummy child_process `no_fork` if the transport protocol
> * does not need fork(2), or a struct child_process object if it does. Once
> @@ -972,16 +1031,13 @@ struct child_process *git_connect(int fd[2], const char *url,
> conn->use_shell = 1;
> conn->in = conn->out = -1;
> if (protocol == PROTO_SSH) {
> - const char *ssh;
> - enum ssh_variant variant;
> char *ssh_host = hostandport;
> const char *port = NULL;
> +
> transport_check_allowed("ssh");
> get_host_and_port(&ssh_host, &port);
> -
> if (!port)
> port = get_port(ssh_host);
> -
Are these random additions and deletions intentional?
> if (flags & CONNECT_DIAG_URL) {
> printf("Diag: url=%s\n", url ? url : "NULL");
> printf("Diag: protocol=%s\n", prot_name(protocol));
> @@ -995,57 +1051,7 @@ struct child_process *git_connect(int fd[2], const char *url,
> strbuf_release(&cmd);
> return NULL;
> }
> -
> - if (looks_like_command_line_option(ssh_host))
> - die("strange hostname '%s' blocked", ssh_host);
> -
> - ssh = get_ssh_command();
> - if (ssh) {
> - variant = determine_ssh_variant(ssh, 1);
> - } else {
> - /*
> - * GIT_SSH is the no-shell version of
> - * GIT_SSH_COMMAND (and must remain so for
> - * historical compatibility).
> - */
> - conn->use_shell = 0;
> -
> - ssh = getenv("GIT_SSH");
> - if (!ssh)
> - ssh = "ssh";
> - variant = determine_ssh_variant(ssh, 0);
> - }
> -
> - 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);
> - }
> -
> - argv_array_push(&conn->args, ssh_host);
> + fill_ssh_args(conn, ssh_host, port, flags);
> } else {
> transport_check_allowed("file");
> if (get_protocol_version_config() > 0) {
> --
> 2.15.0.448.gf294e3d99a
>
--
Brandon Williams
next prev parent reply other threads:[~2017-11-20 21:54 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-20 21:21 [PATCH v3 0/8] Coping with unrecognized ssh wrapper scripts in GIT_SSH Jonathan Nieder
2017-11-20 21:22 ` [PATCH 1/8] ssh test: make copy_ssh_wrapper_as clean up after itself Jonathan Nieder
2017-11-20 21:47 ` Brandon Williams
2017-11-21 1:24 ` Junio C Hamano
2017-11-21 1:49 ` [PATCH 1/8 v2] " Jonathan Nieder
2017-11-21 23:42 ` Stefan Beller
2017-11-20 21:22 ` [PATCH 2/8] connect: move no_fork fallback to git_tcp_connect Jonathan Nieder
2017-11-20 21:23 ` [PATCH 3/8] connect: split git:// setup into a separate function Jonathan Nieder
2017-11-20 21:52 ` Brandon Williams
2017-11-20 22:04 ` Jonathan Nieder
2017-11-20 22:29 ` Brandon Williams
2017-11-20 21:25 ` [PATCH 4/8] connect: split ssh command line options into " Jonathan Nieder
2017-11-20 21:54 ` Brandon Williams [this message]
2017-11-20 22:09 ` Jonathan Nieder
2017-11-20 22:28 ` Brandon Williams
2017-11-20 22:19 ` [PATCH v4 " Jonathan Nieder
2017-11-20 21:26 ` [PATCH 5/8] connect: split ssh option computation to its own function Jonathan Nieder
2017-11-21 1:31 ` Junio C Hamano
2017-11-20 21:30 ` [PATCH 6/8] ssh: 'auto' variant to select between 'ssh' and 'simple' Jonathan Nieder
2017-11-20 22:25 ` Brandon Williams
2017-11-21 1:48 ` Junio C Hamano
2017-11-21 2:01 ` Jonathan Nieder
2017-11-20 21:30 ` [PATCH 7/8] ssh: 'simple' variant does not support -4/-6 Jonathan Nieder
2017-11-20 21:31 ` [PATCH 8/8] ssh: 'simple' variant does not support --port Jonathan Nieder
2017-11-20 22:32 ` [PATCH v3 0/8] Coping with unrecognized ssh wrapper scripts in GIT_SSH Brandon Williams
2017-11-22 0:00 ` Stefan Beller
2017-11-22 1:52 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171120215404.GC92506@google.com \
--to=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=jrnieder@gmail.com \
--cc=sbeller@google.com \
--cc=segev208@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.