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 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.