Merge branch 'jk/guess-repo-name-regression-fix'
[git/git.git] / t / t5603-clone-dirname.sh
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/foo@bar.git foo@bar
94 test_clone_dir ssh://user:password@host/foo@bar foo@bar
95 test_clone_dir ssh://user:passw@rd@host/foo@bar.git foo@bar
96
97 test_clone_dir host:/foo@bar foo@bar
98 test_clone_dir host:/foo@bar.git foo@bar
99 test_clone_dir user:password@host:/foo@bar foo@bar
100 test_clone_dir user:passw@rd@host:/foo@bar.git 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