Git 2.29-rc2
[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         GIT_SSH_VARIANT=ssh &&
15         export GIT_SSH &&
16         export GIT_SSH_VARIANT &&
17         export TRASH_DIRECTORY
18 '
19
20 # make sure that cloning $1 results in local directory $2
21 test_clone_dir () {
22         url=$1; shift
23         dir=$1; shift
24         expect=success
25         bare=non-bare
26         clone_opts=
27         for i in "$@"
28         do
29                 case "$i" in
30                 fail)
31                         expect=failure
32                         ;;
33                 bare)
34                         bare=bare
35                         clone_opts=--bare
36                         ;;
37                 esac
38         done
39         test_expect_$expect "clone of $url goes to $dir ($bare)" "
40                 rm -rf $dir &&
41                 git clone $clone_opts $url &&
42                 test_path_is_dir $dir
43         "
44 }
45
46 # basic syntax with bare and non-bare variants
47 test_clone_dir host:foo foo
48 test_clone_dir host:foo foo.git bare
49 test_clone_dir host:foo.git foo
50 test_clone_dir host:foo.git foo.git bare
51 test_clone_dir host:foo/.git foo
52 test_clone_dir host:foo/.git foo.git bare
53
54 # similar, but using ssh URL rather than host:path syntax
55 test_clone_dir ssh://host/foo foo
56 test_clone_dir ssh://host/foo foo.git bare
57 test_clone_dir ssh://host/foo.git foo
58 test_clone_dir ssh://host/foo.git foo.git bare
59 test_clone_dir ssh://host/foo/.git foo
60 test_clone_dir ssh://host/foo/.git foo.git bare
61
62 # we should remove trailing slashes and .git suffixes
63 test_clone_dir ssh://host/foo/ foo
64 test_clone_dir ssh://host/foo/// 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 test_clone_dir ssh://host/foo///.git/ foo
69 test_clone_dir ssh://host/foo/.git/// foo
70
71 test_clone_dir host:foo/ foo
72 test_clone_dir host:foo/// 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 test_clone_dir host:foo///.git/ foo
77 test_clone_dir host:foo/.git/// foo
78
79 # omitting the path should default to the hostname
80 test_clone_dir ssh://host/ host
81 test_clone_dir ssh://host:1234/ host
82 test_clone_dir ssh://user@host/ host
83 test_clone_dir host:/ host
84
85 # auth materials should be redacted
86 test_clone_dir ssh://user:password@host/ host
87 test_clone_dir ssh://user:password@host:1234/ host
88 test_clone_dir ssh://user:passw@rd@host:1234/ host
89 test_clone_dir user@host:/ host
90 test_clone_dir user:password@host:/ host
91 test_clone_dir user:passw@rd@host:/ host
92
93 # auth-like material should not be dropped
94 test_clone_dir ssh://host/foo@bar foo@bar
95 test_clone_dir ssh://host/foo@bar.git foo@bar
96 test_clone_dir ssh://user:password@host/foo@bar foo@bar
97 test_clone_dir ssh://user:passw@rd@host/foo@bar.git foo@bar
98
99 test_clone_dir host:/foo@bar foo@bar
100 test_clone_dir host:/foo@bar.git foo@bar
101 test_clone_dir user:password@host:/foo@bar foo@bar
102 test_clone_dir user:passw@rd@host:/foo@bar.git foo@bar
103
104 # trailing port-like numbers should not be stripped for paths
105 test_clone_dir ssh://user:password@host/test:1234 1234
106 test_clone_dir ssh://user:password@host/test:1234.git 1234
107
108 test_done