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