| 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='check output directory names used by git-clone' |
| 4 | |
| 5 | . ./test-lib.sh |
| 6 | |
| 7 | # we use a fake ssh wrapper that ignores the arguments |
| 8 | # entirely; we really only care that we get _some_ repo, |
| 9 | # as the real test is what clone does on the local side |
| 10 | test_expect_success 'setup ssh wrapper' ' |
| 11 | write_script "$TRASH_DIRECTORY/ssh-wrapper" <<-\EOF && |
| 12 | git upload-pack "$TRASH_DIRECTORY" |
| 13 | EOF |
| 14 | GIT_SSH="$TRASH_DIRECTORY/ssh-wrapper" && |
| 15 | GIT_SSH_VARIANT=ssh && |
| 16 | export GIT_SSH && |
| 17 | export GIT_SSH_VARIANT && |
| 18 | export TRASH_DIRECTORY |
| 19 | ' |
| 20 | |
| 21 | # make sure that cloning $1 results in local directory $2 |
| 22 | test_clone_dir () { |
| 23 | url=$1; shift |
| 24 | dir=$1; shift |
| 25 | expect=success |
| 26 | bare=non-bare |
| 27 | clone_opts= |
| 28 | for i in "$@" |
| 29 | do |
| 30 | case "$i" in |
| 31 | fail) |
| 32 | expect=failure |
| 33 | ;; |
| 34 | bare) |
| 35 | bare=bare |
| 36 | clone_opts=--bare |
| 37 | ;; |
| 38 | esac |
| 39 | done |
| 40 | test_expect_$expect "clone of $url goes to $dir ($bare)" " |
| 41 | rm -rf $dir && |
| 42 | git clone $clone_opts $url && |
| 43 | test_path_is_dir $dir |
| 44 | " |
| 45 | } |
| 46 | |
| 47 | # basic syntax with bare and non-bare variants |
| 48 | test_clone_dir host:foo foo |
| 49 | test_clone_dir host:foo foo.git bare |
| 50 | test_clone_dir host:foo.git foo |
| 51 | test_clone_dir host:foo.git foo.git bare |
| 52 | test_clone_dir host:foo/.git foo |
| 53 | test_clone_dir host:foo/.git foo.git bare |
| 54 | |
| 55 | # similar, but using ssh URL rather than host:path syntax |
| 56 | test_clone_dir ssh://host/foo foo |
| 57 | test_clone_dir ssh://host/foo foo.git bare |
| 58 | test_clone_dir ssh://host/foo.git foo |
| 59 | test_clone_dir ssh://host/foo.git foo.git bare |
| 60 | test_clone_dir ssh://host/foo/.git foo |
| 61 | test_clone_dir ssh://host/foo/.git foo.git bare |
| 62 | |
| 63 | # we should remove trailing slashes and .git suffixes |
| 64 | test_clone_dir ssh://host/foo/ foo |
| 65 | test_clone_dir ssh://host/foo/// foo |
| 66 | test_clone_dir ssh://host/foo/.git/ foo |
| 67 | test_clone_dir ssh://host/foo.git/ foo |
| 68 | test_clone_dir ssh://host/foo.git/// foo |
| 69 | test_clone_dir ssh://host/foo///.git/ foo |
| 70 | test_clone_dir ssh://host/foo/.git/// foo |
| 71 | |
| 72 | test_clone_dir host:foo/ foo |
| 73 | test_clone_dir host:foo/// foo |
| 74 | test_clone_dir host:foo.git/ foo |
| 75 | test_clone_dir host:foo/.git/ foo |
| 76 | test_clone_dir host:foo.git/// foo |
| 77 | test_clone_dir host:foo///.git/ foo |
| 78 | test_clone_dir host:foo/.git/// foo |
| 79 | |
| 80 | # omitting the path should default to the hostname |
| 81 | test_clone_dir ssh://host/ host |
| 82 | test_clone_dir ssh://host:1234/ host |
| 83 | test_clone_dir ssh://user@host/ host |
| 84 | test_clone_dir host:/ host |
| 85 | |
| 86 | # auth materials should be redacted |
| 87 | test_clone_dir ssh://user:password@host/ host |
| 88 | test_clone_dir ssh://user:password@host:1234/ host |
| 89 | test_clone_dir ssh://user:passw@rd@host:1234/ host |
| 90 | test_clone_dir user@host:/ host |
| 91 | test_clone_dir user:password@host:/ host |
| 92 | test_clone_dir user:passw@rd@host:/ host |
| 93 | |
| 94 | # auth-like material should not be dropped |
| 95 | test_clone_dir ssh://host/foo@bar foo@bar |
| 96 | test_clone_dir ssh://host/foo@bar.git foo@bar |
| 97 | test_clone_dir ssh://user:password@host/foo@bar foo@bar |
| 98 | test_clone_dir ssh://user:passw@rd@host/foo@bar.git foo@bar |
| 99 | |
| 100 | test_clone_dir host:/foo@bar foo@bar |
| 101 | test_clone_dir host:/foo@bar.git foo@bar |
| 102 | test_clone_dir user:password@host:/foo@bar foo@bar |
| 103 | test_clone_dir user:passw@rd@host:/foo@bar.git foo@bar |
| 104 | |
| 105 | # trailing port-like numbers should not be stripped for paths |
| 106 | test_clone_dir ssh://user:password@host/test:1234 1234 |
| 107 | test_clone_dir ssh://user:password@host/test:1234.git 1234 |
| 108 | |
| 109 | test_done |