On Mon, Oct 23, 2017 at 2:31 PM, Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: > 1. First, 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 capital -G? > - if (variant == VARIANT_TORTOISEPLINK) > - argv_array_push(&conn->args, "-batch"); > + detect.use_shell = conn->use_shell; Why do we have to use a shell for evaluation of this test balloon? > + detect.no_stdin = detect.no_stdout = detect.no_stderr = 1; okay. ... > + argv_array_push(&detect.args, "-G"); ... > + variant = run_command(&detect) ? VARIANT_SIMPLE : VARIANT_SSH; What if we have a VARIANT_SIMPLE, that doesn't care about -G but just connects to the remote host (keeping the session open), do we need to kill it after some time to have run_command return eventually? Or can we give a command to be executed remotely (e.g. 'false') that we know returns quickly? > ' > > +test_expect_success 'OpenSSH-like uplink is treated as ssh' ' > + write_script "$TRASH_DIRECTORY/uplink" <<-EOF && > + if test "\$1" = "-G" Reading this test (and the commit message) I realize, we do care about the order of options, so this is fine.