From: Brandon Williams <bmwill@google.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: Jonathan Tan <jonathantanmy@google.com>,
git@vger.kernel.org, gitster@pobox.com, peff@peff.net,
sbeller@google.com, William Yan <wyan@google.com>
Subject: Re: [PATCH 3/5] ssh: 'auto' variant to select between 'ssh' and 'simple'
Date: Mon, 23 Oct 2017 16:27:13 -0700 [thread overview]
Message-ID: <20171023232713.GA79163@google.com> (raw)
In-Reply-To: <20171023231839.2g5wudvmoj3hphua@aiede.mtv.corp.google.com>
On 10/23, Jonathan Nieder wrote:
> Android's "repo" tool is a tool for managing a large codebase
> consisting of multiple smaller repositories, similar to Git's
> submodule feature. Starting with Git 94b8ae5a (ssh: introduce a
> 'simple' ssh variant, 2017-10-16), users noticed that it stopped
> handling the port in ssh:// URLs.
>
> The cause: when it encounters ssh:// URLs, repo pre-connects to the
> server and sets GIT_SSH to a helper ".repo/repo/git_ssh" that reuses
> that connection. Before 94b8ae5a, the helper was assumed to support
> OpenSSH options for lack of a better guess and got passed a -p option
> to set the port. After that patch, it uses the new default of a
> simple helper that does not accept an option to set the port.
>
> The next release of "repo" will set GIT_SSH_VARIANT to "ssh" to avoid
> that. But users of old versions and of other similar GIT_SSH
> implementations would not get the benefit of that fix.
>
> So update the default to use OpenSSH options again, with a twist. As
> observed in 94b8ae5a, we cannot assume that $GIT_SSH always handles
> OpenSSH options: common helpers such as travis-ci's dpl[*] are
> configured using GIT_SSH and do not accept OpenSSH options. So make
> the default a new variant "auto", with the following behavior:
>
> 1. First, check for a recognized basename, like today.
>
> 2. If the basename is not recognized, check whether $GIT_SSH supports
> OpenSSH options by running
>
> $GIT_SSH -G <options> <host>
>
> This returns status 0 and prints configuration in OpenSSH if it
> recognizes all <options> and returns status 255 if it encounters
> an unrecognized option. A wrapper script like
>
> exec ssh -- "$@"
>
> would fail with
>
> ssh: Could not resolve hostname -g: Name or service not known
>
> , correctly reflecting that it does not support OpenSSH options.
>
> 3. Based on the result from step (2), behave like "ssh" (if it
> succeeded) or "simple" (if it failed).
>
> This way, the default ssh variant for unrecognized commands can handle
> both the repo and dpl cases as intended.
>
> [*] https://github.com/travis-ci/dpl/blob/6c3fddfda1f2a85944c544446b068bac0a77c049/lib/dpl/provider.rb#L215
>
> Reported-by: William Yan <wyan@google.com>
> Improved-by: Jonathan Tan <jonathantanmy@google.com>
> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> ---
> This is the main one. Simplified by making "auto" behave the same as
> unset.
I still don't see the benefit of allowing a user to explicitly set
'auto' then, if setting it to 'auto' is effectively a noop. But maybe
there's something I'm not seeing.
>
> Documentation/config.txt | 24 ++++++++------
> connect.c | 82 +++++++++++++++++++++++++++++++-----------------
> t/t5601-clone.sh | 20 ++++++++++++
> 3 files changed, 88 insertions(+), 38 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 0460af37e2..6dffa4aa3d 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -2081,16 +2081,22 @@ matched against are those given directly to Git commands. This means any URLs
> visited as a result of a redirection do not participate in matching.
>
> ssh.variant::
> - Depending on the value of the environment variables `GIT_SSH` or
> - `GIT_SSH_COMMAND`, or the config setting `core.sshCommand`, Git
> - auto-detects whether to adjust its command-line parameters for use
> - with ssh (OpenSSH), plink or tortoiseplink, as opposed to the default
> - (simple).
> + By default, Git determines the command line arguments to use
> + based on the basename of the configured SSH command (configured
> + using the environment variable `GIT_SSH` or `GIT_SSH_COMMAND` or
> + the config setting `core.sshCommand`). If the basename is
> + unrecognized, Git will attempt to detect support of OpenSSH
> + options by first invoking the configured SSH command with the
> + `-G` (print configuration) option and will subsequently use
> + OpenSSH options (if that is successful) or no options besides
> + the host and remote command (if it fails).
> +
> -The config variable `ssh.variant` can be set to override this auto-detection;
> -valid values are `ssh`, `simple`, `plink`, `putty` or `tortoiseplink`. Any
> -other value will be treated as normal ssh. This setting can be overridden via
> -the environment variable `GIT_SSH_VARIANT`.
> +The config variable `ssh.variant` can be set to override this detection:
> +valid values are `ssh` (to use OpenSSH options), `plink`, `putty`,
> +`tortoiseplink`, `simple` (no options except the host and remote command).
> +The default auto-detection can be explicitly requested using the value
> +`auto`. Any other value is treated as `ssh`. This setting can also be
> +overridden via the environment variable `GIT_SSH_VARIANT`.
> +
> The current command-line parameters used for each variant are as
> follows:
> diff --git a/connect.c b/connect.c
> index 77ab6db3bb..0441dcbacf 100644
> --- a/connect.c
> +++ b/connect.c
> @@ -777,6 +777,7 @@ static const char *get_ssh_command(void)
> }
>
> enum ssh_variant {
> + VARIANT_AUTO,
> VARIANT_SIMPLE,
> VARIANT_SSH,
> VARIANT_PLINK,
> @@ -784,14 +785,16 @@ enum ssh_variant {
> VARIANT_TORTOISEPLINK,
> };
>
> -static int override_ssh_variant(enum ssh_variant *ssh_variant)
> +static void override_ssh_variant(enum ssh_variant *ssh_variant)
> {
> const char *variant = getenv("GIT_SSH_VARIANT");
>
> if (!variant && git_config_get_string_const("ssh.variant", &variant))
> - return 0;
> + return;
>
> - if (!strcmp(variant, "plink"))
> + if (!strcmp(variant, "auto"))
> + *ssh_variant = VARIANT_AUTO;
> + else if (!strcmp(variant, "plink"))
> *ssh_variant = VARIANT_PLINK;
> else if (!strcmp(variant, "putty"))
> *ssh_variant = VARIANT_PUTTY;
> @@ -801,18 +804,18 @@ static int override_ssh_variant(enum ssh_variant *ssh_variant)
> *ssh_variant = VARIANT_SIMPLE;
> else
> *ssh_variant = VARIANT_SSH;
> -
> - return 1;
> }
>
> static enum ssh_variant determine_ssh_variant(const char *ssh_command,
> int is_cmdline)
> {
> - enum ssh_variant ssh_variant = VARIANT_SIMPLE;
> + enum ssh_variant ssh_variant = VARIANT_AUTO;
> const char *variant;
> char *p = NULL;
>
> - if (override_ssh_variant(&ssh_variant))
> + override_ssh_variant(&ssh_variant);
> +
> + if (ssh_variant != VARIANT_AUTO)
> return ssh_variant;
>
> if (!is_cmdline) {
> @@ -908,6 +911,38 @@ static struct child_process *git_connect_git(int fd[2], char *hostandport,
> return conn;
> }
>
> +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)
> @@ -937,33 +972,22 @@ 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_AUTO) {
> + struct child_process detect = CHILD_PROCESS_INIT;
>
> - if (variant == VARIANT_TORTOISEPLINK)
> - argv_array_push(&conn->args, "-batch");
> + detect.use_shell = conn->use_shell;
> + detect.no_stdin = detect.no_stdout = detect.no_stderr = 1;
>
> - 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(&detect.args, ssh);
> + argv_array_push(&detect.args, "-G");
> + push_ssh_options(&detect.args, &detect.env_array,
> + VARIANT_SSH, port, flags);
> + argv_array_push(&detect.args, ssh_host);
>
> - argv_array_push(&conn->args, port);
> + variant = run_command(&detect) ? VARIANT_SIMPLE : VARIANT_SSH;
> }
>
> + push_ssh_options(&conn->args, &conn->env_array, variant, port, flags);
> argv_array_push(&conn->args, ssh_host);
> }
>
> diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh
> index 86811a0c35..df9dfafdd8 100755
> --- a/t/t5601-clone.sh
> +++ b/t/t5601-clone.sh
> @@ -372,6 +372,12 @@ test_expect_success 'variant can be overriden' '
> expect_ssh myhost src
> '
>
> +test_expect_success 'variant=auto picks based on basename' '
> + copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
> + git -c ssh.variant=auto clone -4 "[myhost:123]:src" ssh-auto-clone &&
> + expect_ssh "-4 -P 123" myhost src
> +'
> +
> test_expect_success 'simple is treated as simple' '
> copy_ssh_wrapper_as "$TRASH_DIRECTORY/simple" &&
> git clone -4 "[myhost:123]:src" ssh-bracket-clone-simple &&
> @@ -384,6 +390,20 @@ test_expect_success 'uplink is treated as simple' '
> expect_ssh myhost src
> '
>
> +test_expect_success 'OpenSSH-like uplink is treated as ssh' '
> + write_script "$TRASH_DIRECTORY/uplink" <<-EOF &&
> + if test "\$1" = "-G"
> + then
> + exit 0
> + fi &&
> + exec "\$TRASH_DIRECTORY/ssh$X" "\$@"
> + EOF
> + GIT_SSH="$TRASH_DIRECTORY/uplink" &&
> + export GIT_SSH &&
> + git clone "[myhost:123]:src" ssh-bracket-clone-sshlike-uplink &&
> + expect_ssh "-p 123" myhost src
> +'
> +
> test_expect_success 'plink is treated specially (as putty)' '
> copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
> git clone "[myhost:123]:src" ssh-bracket-clone-plink-0 &&
> --
> 2.15.0.rc1.287.g2b38de12cc
>
--
Brandon Williams
next prev parent reply other threads:[~2017-10-23 23:27 UTC|newest]
Thread overview: 161+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-13 21:54 [PATCH 0/8] protocol transition Brandon Williams
2017-09-13 21:54 ` [PATCH 1/8] pkt-line: add packet_write function Brandon Williams
2017-09-13 21:54 ` [PATCH 2/8] protocol: introduce protocol extention mechanisms Brandon Williams
2017-09-13 22:27 ` Stefan Beller
2017-09-18 17:02 ` Brandon Williams
2017-09-18 18:34 ` Stefan Beller
2017-09-18 19:58 ` Brandon Williams
2017-09-18 20:06 ` Stefan Beller
2017-09-13 21:54 ` [PATCH 3/8] daemon: recognize hidden request arguments Brandon Williams
2017-09-13 22:31 ` Stefan Beller
2017-09-18 16:56 ` Brandon Williams
2017-09-21 0:24 ` Jonathan Tan
2017-09-21 0:31 ` Jonathan Tan
2017-09-21 21:55 ` Brandon Williams
2017-09-13 21:54 ` [PATCH 4/8] upload-pack, receive-pack: introduce protocol version 1 Brandon Williams
2017-09-13 21:54 ` [PATCH 5/8] connect: teach client to recognize v1 server response Brandon Williams
2017-09-13 21:54 ` [PATCH 6/8] connect: tell server that the client understands v1 Brandon Williams
2017-09-13 21:54 ` [PATCH 7/8] http: " Brandon Williams
2017-09-13 21:54 ` [PATCH 8/8] i5700: add interop test for protocol transition Brandon Williams
2017-09-20 18:48 ` [PATCH 1.5/8] connect: die when a capability line comes after a ref Brandon Williams
2017-09-20 19:14 ` Jeff King
2017-09-20 20:06 ` Brandon Williams
2017-09-20 20:48 ` Jonathan Nieder
2017-09-21 3:02 ` Junio C Hamano
2017-09-21 20:45 ` [PATCH] connect: in ref advertisement, shallows are last Jonathan Tan
2017-09-21 23:45 ` [PATCH v2] " Jonathan Tan
2017-09-22 0:00 ` Brandon Williams
2017-09-22 0:08 ` [PATCH v3] " Jonathan Tan
2017-09-22 1:06 ` Junio C Hamano
2017-09-22 1:39 ` Junio C Hamano
2017-09-22 16:45 ` Brandon Williams
2017-09-22 20:15 ` [PATCH v4] " Jonathan Tan
2017-09-22 21:01 ` Brandon Williams
2017-09-22 22:16 ` Jonathan Tan
2017-09-24 0:52 ` Junio C Hamano
2017-09-26 18:21 ` [PATCH v5] " Jonathan Tan
2017-09-26 18:31 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 0/9] protocol transition Brandon Williams
2017-09-26 23:56 ` [PATCH v2 1/9] connect: in ref advertisement, shallows are last Brandon Williams
2017-09-26 23:56 ` [PATCH v2 2/9] pkt-line: add packet_write function Brandon Williams
2017-09-26 23:56 ` [PATCH v2 3/9] protocol: introduce protocol extention mechanisms Brandon Williams
2017-09-27 5:17 ` Junio C Hamano
2017-09-27 11:23 ` Junio C Hamano
2017-09-29 21:20 ` Brandon Williams
2017-09-28 21:58 ` Brandon Williams
2017-09-27 6:30 ` Stefan Beller
2017-09-28 21:04 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 4/9] daemon: recognize hidden request arguments Brandon Williams
2017-09-27 5:20 ` Junio C Hamano
2017-09-27 21:22 ` Brandon Williams
2017-09-28 16:57 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 5/9] upload-pack, receive-pack: introduce protocol version 1 Brandon Williams
2017-09-27 5:23 ` Junio C Hamano
2017-09-27 21:29 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 6/9] connect: teach client to recognize v1 server response Brandon Williams
2017-09-27 1:07 ` Junio C Hamano
2017-09-27 17:34 ` Brandon Williams
2017-09-27 5:29 ` Junio C Hamano
2017-09-28 22:08 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 7/9] connect: tell server that the client understands v1 Brandon Williams
2017-09-27 6:21 ` Junio C Hamano
2017-09-27 6:29 ` Junio C Hamano
2017-09-29 21:32 ` Brandon Williams
2017-09-28 22:20 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 8/9] http: " Brandon Williams
2017-09-27 6:24 ` Junio C Hamano
2017-09-27 21:36 ` Brandon Williams
2017-09-26 23:56 ` [PATCH v2 9/9] i5700: add interop test for protocol transition Brandon Williams
2017-10-03 20:14 ` [PATCH v3 00/10] " Brandon Williams
2017-10-03 20:14 ` [PATCH v3 01/10] connect: in ref advertisement, shallows are last Brandon Williams
2017-10-10 18:14 ` Jonathan Tan
2017-10-03 20:14 ` [PATCH v3 02/10] pkt-line: add packet_write function Brandon Williams
2017-10-10 18:15 ` Jonathan Tan
2017-10-03 20:15 ` [PATCH v3 03/10] protocol: introduce protocol extention mechanisms Brandon Williams
2017-10-06 9:09 ` Simon Ruderich
2017-10-06 9:40 ` Junio C Hamano
2017-10-06 11:11 ` Martin Ågren
2017-10-06 12:09 ` Junio C Hamano
2017-10-06 19:42 ` Martin Ågren
2017-10-06 20:27 ` Stefan Beller
2017-10-08 14:24 ` Martin Ågren
2017-10-10 21:00 ` Brandon Williams
2017-10-10 21:17 ` Jonathan Nieder
2017-10-10 21:32 ` Stefan Beller
2017-10-11 0:39 ` Junio C Hamano
2017-10-13 22:46 ` Brandon Williams
2017-10-09 4:05 ` Martin Ågren
2017-10-10 19:51 ` Jonathan Tan
2017-10-03 20:15 ` [PATCH v3 04/10] daemon: recognize hidden request arguments Brandon Williams
2017-10-10 18:24 ` Jonathan Tan
2017-10-13 22:04 ` Brandon Williams
2017-10-03 20:15 ` [PATCH v3 05/10] upload-pack, receive-pack: introduce protocol version 1 Brandon Williams
2017-10-10 18:28 ` Jonathan Tan
2017-10-13 22:18 ` Brandon Williams
2017-10-03 20:15 ` [PATCH v3 06/10] connect: teach client to recognize v1 server response Brandon Williams
2017-10-03 20:15 ` [PATCH v3 07/10] connect: tell server that the client understands v1 Brandon Williams
2017-10-10 18:30 ` Jonathan Tan
2017-10-13 22:56 ` Brandon Williams
2017-10-03 20:15 ` [PATCH v3 08/10] http: " Brandon Williams
2017-10-03 20:15 ` [PATCH v3 09/10] i5700: add interop test for protocol transition Brandon Williams
2017-10-03 20:15 ` [PATCH v3 10/10] ssh: introduce a 'simple' ssh variant Brandon Williams
2017-10-03 21:42 ` Jonathan Nieder
2017-10-16 17:18 ` Brandon Williams
2017-10-23 21:28 ` [PATCH 0/5] Coping with unrecognized ssh wrapper scripts in GIT_SSH Jonathan Nieder
2017-10-23 21:29 ` [PATCH 1/5] connect: split git:// setup into a separate function Jonathan Nieder
2017-10-23 22:16 ` Stefan Beller
2017-10-24 0:09 ` [WIP PATCH] diff: add option to ignore whitespaces for move detection only Stefan Beller
2017-10-24 18:48 ` Brandon Williams
2017-10-25 1:25 ` Junio C Hamano
2017-10-25 1:26 ` Junio C Hamano
2017-10-25 18:58 ` Brandon Williams
2017-10-24 1:54 ` [PATCH 1/5] connect: split git:// setup into a separate function Junio C Hamano
2017-10-24 2:52 ` Stefan Beller
2017-10-23 21:30 ` [PATCH 2/5] connect: split ssh command line options into " Jonathan Nieder
2017-10-23 21:48 ` Stefan Beller
2017-10-23 21:31 ` [PATCH 3/5] ssh: 'auto' variant to select between 'ssh' and 'simple' Jonathan Nieder
2017-10-23 22:19 ` Jonathan Tan
2017-10-23 22:43 ` Jonathan Nieder
2017-10-23 22:51 ` Brandon Williams
2017-10-23 22:57 ` Jonathan Tan
2017-10-23 23:16 ` [PATCH v2 0/5] Coping with unrecognized ssh wrapper scripts in GIT_SSH Jonathan Nieder
2017-10-23 23:17 ` [PATCH 1/5] connect: split git:// setup into a separate function Jonathan Nieder
2017-10-24 1:44 ` Junio C Hamano
2017-11-15 20:25 ` Jonathan Nieder
2017-11-17 1:12 ` Junio C Hamano
2017-10-23 23:17 ` [PATCH 2/5] connect: split ssh command line options into " Jonathan Nieder
2017-10-24 2:01 ` Junio C Hamano
2017-10-23 23:18 ` [PATCH 3/5] ssh: 'auto' variant to select between 'ssh' and 'simple' Jonathan Nieder
2017-10-23 23:27 ` Brandon Williams [this message]
2017-10-23 23:33 ` Stefan Beller
2017-10-23 23:19 ` [PATCH 4/5] ssh: 'simple' variant does not support -4/-6 Jonathan Nieder
2017-10-23 23:19 ` [PATCH 5/5] ssh: 'simple' variant does not support --port Jonathan Nieder
2017-10-24 2:22 ` [PATCH v2 0/5] Coping with unrecognized ssh wrapper scripts in GIT_SSH Junio C Hamano
2017-10-23 23:12 ` [PATCH 3/5] ssh: 'auto' variant to select between 'ssh' and 'simple' Jonathan Nieder
2017-10-23 22:33 ` Stefan Beller
2017-10-23 22:54 ` Jonathan Nieder
2017-10-24 2:16 ` Junio C Hamano
2017-10-25 12:51 ` Johannes Schindelin
2017-10-25 16:18 ` Stefan Beller
2017-10-25 16:32 ` Jonathan Nieder
2017-10-30 0:40 ` Junio C Hamano
2017-10-30 12:37 ` Johannes Schindelin
2017-10-23 21:32 ` [PATCH 4/5] ssh: 'simple' variant does not support -4/-6 Jonathan Nieder
2017-10-23 21:33 ` [PATCH 5/5] ssh: 'simple' variant does not support --port Jonathan Nieder
2017-10-23 22:37 ` Stefan Beller
2017-10-04 6:20 ` [PATCH v3 00/10] protocol transition Junio C Hamano
2017-10-10 19:39 ` [PATCH] Documentation: document Extra Parameters Jonathan Tan
2017-10-13 22:26 ` Brandon Williams
2017-10-16 17:55 ` [PATCH v4 00/11] protocol transition Brandon Williams
2017-10-16 17:55 ` [PATCH v4 01/11] connect: in ref advertisement, shallows are last Brandon Williams
2017-10-16 17:55 ` [PATCH v4 02/11] pkt-line: add packet_write function Brandon Williams
2017-10-16 17:55 ` [PATCH v4 03/11] protocol: introduce protocol extension mechanisms Brandon Williams
2017-10-16 21:25 ` Kevin Daudt
2017-10-16 17:55 ` [PATCH v4 04/11] daemon: recognize hidden request arguments Brandon Williams
2017-10-16 17:55 ` [PATCH v4 05/11] upload-pack, receive-pack: introduce protocol version 1 Brandon Williams
2017-10-16 17:55 ` [PATCH v4 06/11] connect: teach client to recognize v1 server response Brandon Williams
2017-10-16 17:55 ` [PATCH v4 07/11] connect: tell server that the client understands v1 Brandon Williams
2017-10-16 17:55 ` [PATCH v4 08/11] http: " Brandon Williams
2017-10-16 17:55 ` [PATCH v4 09/11] i5700: add interop test for protocol transition Brandon Williams
2017-10-16 17:55 ` [PATCH v4 10/11] ssh: introduce a 'simple' ssh variant Brandon Williams
2017-10-16 17:55 ` [PATCH v4 11/11] Documentation: document Extra Parameters Brandon Williams
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=20171023232713.GA79163@google.com \
--to=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
--cc=wyan@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).