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 fail
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 fail
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 fail
65
+test_clone_dir ssh://host/foo.git/// foo fail
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 fail
72
+test_clone_dir host:foo/.git/ foo
73
+test_clone_dir host:foo.git/// foo fail
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