| #!/bin/sh | |
| test_description='check output directory names used by git-clone' | |
| . ./test-lib.sh | |
| # we use a fake ssh wrapper that ignores the arguments | |
| # entirely; we really only care that we get _some_ repo, | |
| # as the real test is what clone does on the local side | |
| test_expect_success 'setup ssh wrapper' ' | |
| write_script "$TRASH_DIRECTORY/ssh-wrapper" <<-\EOF && | |
| 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 | |
| ' | |
| # make sure that cloning $1 results in local directory $2 | |
| test_clone_dir () { | |
| url=$1; shift | |
| dir=$1; shift | |
| expect=success | |
| bare=non-bare | |
| clone_opts= | |
| for i in "$@" | |
| do | |
| case "$i" in | |
| fail) | |
| expect=failure | |
| ;; | |
| bare) | |
| bare=bare | |
| clone_opts=--bare | |
| ;; | |
| esac | |
| done | |
| test_expect_$expect "clone of $url goes to $dir ($bare)" " | |
| rm -rf $dir && | |
| git clone $clone_opts $url && | |
| test_path_is_dir $dir | |
| " | |
| } | |
| # basic syntax with bare and non-bare variants | |
| test_clone_dir host:foo foo | |
| test_clone_dir host:foo foo.git bare | |
| test_clone_dir host:foo.git foo | |
| test_clone_dir host:foo.git foo.git bare | |
| test_clone_dir host:foo/.git foo | |
| test_clone_dir host:foo/.git foo.git bare | |
| # similar, but using ssh URL rather than host:path syntax | |
| test_clone_dir ssh://host/foo foo | |
| test_clone_dir ssh://host/foo foo.git bare | |
| test_clone_dir ssh://host/foo.git foo | |
| test_clone_dir ssh://host/foo.git foo.git bare | |
| test_clone_dir ssh://host/foo/.git foo | |
| test_clone_dir ssh://host/foo/.git foo.git bare | |
| # we should remove trailing slashes and .git suffixes | |
| test_clone_dir ssh://host/foo/ foo | |
| test_clone_dir ssh://host/foo/// foo | |
| test_clone_dir ssh://host/foo/.git/ foo | |
| test_clone_dir ssh://host/foo.git/ foo | |
| test_clone_dir ssh://host/foo.git/// foo | |
| test_clone_dir ssh://host/foo///.git/ foo | |
| test_clone_dir ssh://host/foo/.git/// foo | |
| test_clone_dir host:foo/ foo | |
| test_clone_dir host:foo/// foo | |
| test_clone_dir host:foo.git/ foo | |
| test_clone_dir host:foo/.git/ foo | |
| test_clone_dir host:foo.git/// foo | |
| test_clone_dir host:foo///.git/ foo | |
| test_clone_dir host:foo/.git/// foo | |
| # omitting the path should default to the hostname | |
| test_clone_dir ssh://host/ host | |
| test_clone_dir ssh://host:1234/ host | |
| test_clone_dir ssh://user@host/ host | |
| test_clone_dir host:/ host | |
| # auth materials should be redacted | |
| test_clone_dir ssh://user:password@host/ host | |
| test_clone_dir ssh://user:password@host:1234/ host | |
| test_clone_dir ssh://user:passw@rd@host:1234/ host | |
| test_clone_dir user@host:/ host | |
| test_clone_dir user:password@host:/ host | |
| test_clone_dir user:passw@rd@host:/ host | |
| # auth-like material should not be dropped | |
| test_clone_dir ssh://host/foo@bar foo@bar | |
| test_clone_dir ssh://host/foo@bar.git foo@bar | |
| test_clone_dir ssh://user:password@host/foo@bar foo@bar | |
| test_clone_dir ssh://user:passw@rd@host/foo@bar.git foo@bar | |
| test_clone_dir host:/foo@bar foo@bar | |
| test_clone_dir host:/foo@bar.git foo@bar | |
| test_clone_dir user:password@host:/foo@bar foo@bar | |
| test_clone_dir user:passw@rd@host:/foo@bar.git foo@bar | |
| # trailing port-like numbers should not be stripped for paths | |
| test_clone_dir ssh://user:password@host/test:1234 1234 | |
| test_clone_dir ssh://user:password@host/test:1234.git 1234 | |
| test_done |