1#!/bin/sh
2
3test_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
9test_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
19test_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
45test_clone_dir host:foo foo
46test_clone_dir host:foo foo.git bare
47test_clone_dir host:foo.git foo
48test_clone_dir host:foo.git foo.git bare
49test_clone_dir host:foo/.git foo
50test_clone_dir host:foo/.git foo.git bare
51
52# similar, but using ssh URL rather than host:path syntax
53test_clone_dir ssh://host/foo foo
54test_clone_dir ssh://host/foo foo.git bare
55test_clone_dir ssh://host/foo.git foo
56test_clone_dir ssh://host/foo.git foo.git bare
57test_clone_dir ssh://host/foo/.git foo
58test_clone_dir ssh://host/foo/.git foo.git bare
59
60# we should remove trailing slashes and .git suffixes
61test_clone_dir ssh://host/foo/ foo
62test_clone_dir ssh://host/foo/// foo
63test_clone_dir ssh://host/foo/.git/ foo
64test_clone_dir ssh://host/foo.git/ foo
65test_clone_dir ssh://host/foo.git/// foo
66test_clone_dir ssh://host/foo///.git/ foo
67test_clone_dir ssh://host/foo/.git/// foo
68
69test_clone_dir host:foo/ foo
70test_clone_dir host:foo/// foo
71test_clone_dir host:foo.git/ foo
72test_clone_dir host:foo/.git/ foo
73test_clone_dir host:foo.git/// foo
74test_clone_dir host:foo///.git/ foo
75test_clone_dir host:foo/.git/// foo
76
77# omitting the path should default to the hostname
78test_clone_dir ssh://host/ host
79test_clone_dir ssh://host:1234/ host fail
80test_clone_dir ssh://user@host/ host fail
81test_clone_dir host:/ host fail
82
83# auth materials should be redacted
84test_clone_dir ssh://user:password@host/ host fail
85test_clone_dir ssh://user:password@host:1234/ host fail
86test_clone_dir ssh://user:passw@rd@host:1234/ host fail
87test_clone_dir user@host:/ host fail
88test_clone_dir user:password@host:/ host fail
89test_clone_dir user:passw@rd@host:/ host fail
90
91# auth-like material should not be dropped
92test_clone_dir ssh://host/foo@bar foo@bar
93test_clone_dir ssh://host/foo@bar.git foo@bar
94test_clone_dir ssh://user:password@host/foo@bar foo@bar
95test_clone_dir ssh://user:passw@rd@host/foo@bar.git foo@bar
96
97test_clone_dir host:/foo@bar foo@bar
98test_clone_dir host:/foo@bar.git foo@bar
99test_clone_dir user:password@host:/foo@bar foo@bar
100test_clone_dir user:passw@rd@host:/foo@bar.git foo@bar
101
102# trailing port-like numbers should not be stripped for paths
103test_clone_dir ssh://user:password@host/test:1234 1234
104test_clone_dir ssh://user:password@host/test:1234.git 1234
105
106test_done