Merge branch 'jn/ssh-wrappers'
The ssh-variant 'simple' introduced earlier broke existing installations by not passing --port/-4/-6 and not diagnosing an attempt to pass these as an error. Instead, default to automatically detect how compatible the GIT_SSH/GIT_SSH_COMMAND is to OpenSSH convention and then error out an invocation to make it easier to diagnose connection errors. * jn/ssh-wrappers: connect: correct style of C-style comment ssh: 'simple' variant does not support --port ssh: 'simple' variant does not support -4/-6 ssh: 'auto' variant to select between 'ssh' and 'simple' connect: split ssh option computation to its own function connect: split ssh command line options into separate function connect: split git:// setup into a separate function connect: move no_fork fallback to git_tcp_connect ssh test: make copy_ssh_wrapper_as clean up after itself
This commit is contained in:
@ -306,23 +306,21 @@ test_expect_success 'clone checking out a tag' '
|
||||
test_cmp fetch.expected fetch.actual
|
||||
'
|
||||
|
||||
setup_ssh_wrapper () {
|
||||
test_expect_success 'setup ssh wrapper' '
|
||||
rm -f "$TRASH_DIRECTORY/ssh$X" &&
|
||||
cp "$GIT_BUILD_DIR/t/helper/test-fake-ssh$X" \
|
||||
"$TRASH_DIRECTORY/ssh$X" &&
|
||||
GIT_SSH="$TRASH_DIRECTORY/ssh$X" &&
|
||||
export GIT_SSH &&
|
||||
export TRASH_DIRECTORY &&
|
||||
>"$TRASH_DIRECTORY"/ssh-output
|
||||
'
|
||||
}
|
||||
test_expect_success 'set up ssh wrapper' '
|
||||
cp "$GIT_BUILD_DIR/t/helper/test-fake-ssh$X" \
|
||||
"$TRASH_DIRECTORY/ssh$X" &&
|
||||
GIT_SSH="$TRASH_DIRECTORY/ssh$X" &&
|
||||
export GIT_SSH &&
|
||||
export TRASH_DIRECTORY &&
|
||||
>"$TRASH_DIRECTORY"/ssh-output
|
||||
'
|
||||
|
||||
copy_ssh_wrapper_as () {
|
||||
rm -f "${1%$X}$X" &&
|
||||
cp "$TRASH_DIRECTORY/ssh$X" "${1%$X}$X" &&
|
||||
test_when_finished "rm $(git rev-parse --sq-quote "${1%$X}$X")" &&
|
||||
GIT_SSH="${1%$X}$X" &&
|
||||
export GIT_SSH
|
||||
test_when_finished "GIT_SSH=\"\$TRASH_DIRECTORY/ssh\$X\""
|
||||
}
|
||||
|
||||
expect_ssh () {
|
||||
@ -346,8 +344,6 @@ expect_ssh () {
|
||||
(cd "$TRASH_DIRECTORY" && test_cmp ssh-expect ssh-output)
|
||||
}
|
||||
|
||||
setup_ssh_wrapper
|
||||
|
||||
test_expect_success 'clone myhost:src uses ssh' '
|
||||
git clone myhost:src ssh-clone &&
|
||||
expect_ssh myhost src
|
||||
@ -369,23 +365,50 @@ test_expect_success 'OpenSSH variant passes -4' '
|
||||
expect_ssh "-4 -p 123" myhost src
|
||||
'
|
||||
|
||||
test_expect_success 'variant can be overriden' '
|
||||
git -c ssh.variant=simple clone -4 "[myhost:123]:src" ssh-simple-clone &&
|
||||
expect_ssh myhost src
|
||||
test_expect_success 'variant can be overridden' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/putty" &&
|
||||
git -c ssh.variant=putty clone -4 "[myhost:123]:src" ssh-putty-clone &&
|
||||
expect_ssh "-4 -P 123" myhost src
|
||||
'
|
||||
|
||||
test_expect_success 'simple is treated as simple' '
|
||||
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 does not support -4/-6' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/simple" &&
|
||||
git clone -4 "[myhost:123]:src" ssh-bracket-clone-simple &&
|
||||
expect_ssh myhost src
|
||||
test_must_fail git clone -4 "myhost:src" ssh-4-clone-simple
|
||||
'
|
||||
|
||||
test_expect_success 'simple does not support port' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/simple" &&
|
||||
test_must_fail git clone "[myhost:123]:src" ssh-bracket-clone-simple
|
||||
'
|
||||
|
||||
test_expect_success 'uplink is treated as simple' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/uplink" &&
|
||||
git clone "[myhost:123]:src" ssh-bracket-clone-uplink &&
|
||||
test_must_fail git clone "[myhost:123]:src" ssh-bracket-clone-uplink &&
|
||||
git clone "myhost:src" ssh-clone-uplink &&
|
||||
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
|
||||
test_when_finished "rm -f \"\$TRASH_DIRECTORY/uplink\"" &&
|
||||
GIT_SSH="$TRASH_DIRECTORY/uplink" &&
|
||||
test_when_finished "GIT_SSH=\"\$TRASH_DIRECTORY/ssh\$X\"" &&
|
||||
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 &&
|
||||
@ -434,12 +457,14 @@ test_expect_success 'ssh.variant overrides plink detection' '
|
||||
'
|
||||
|
||||
test_expect_success 'GIT_SSH_VARIANT overrides plink detection to plink' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
|
||||
GIT_SSH_VARIANT=plink \
|
||||
git clone "[myhost:123]:src" ssh-bracket-clone-variant-3 &&
|
||||
expect_ssh "-P 123" myhost src
|
||||
'
|
||||
|
||||
test_expect_success 'GIT_SSH_VARIANT overrides plink to tortoiseplink' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink" &&
|
||||
GIT_SSH_VARIANT=tortoiseplink \
|
||||
git clone "[myhost:123]:src" ssh-bracket-clone-variant-4 &&
|
||||
expect_ssh "-batch -P 123" myhost src
|
||||
@ -451,9 +476,6 @@ test_expect_success 'clean failure on broken quoting' '
|
||||
git clone "[myhost:123]:src" sq-failure
|
||||
'
|
||||
|
||||
# Reset the GIT_SSH environment variable for clone tests.
|
||||
setup_ssh_wrapper
|
||||
|
||||
counter=0
|
||||
# $1 url
|
||||
# $2 none|host
|
||||
|
@ -11,7 +11,9 @@ test_expect_success 'setup ssh wrapper' '
|
||||
git upload-pack "$TRASH_DIRECTORY"
|
||||
EOF
|
||||
GIT_SSH="$TRASH_DIRECTORY/ssh-wrapper" &&
|
||||
GIT_SSH_VARIANT=ssh &&
|
||||
export GIT_SSH &&
|
||||
export GIT_SSH_VARIANT &&
|
||||
export TRASH_DIRECTORY
|
||||
'
|
||||
|
||||
|
Reference in New Issue
Block a user