]> git.ipfire.org Git - thirdparty/git.git/blame - t/t1402-check-ref-format.sh
The third batch
[thirdparty/git.git] / t / t1402-check-ref-format.sh
CommitLineData
58a05c74
JN
1#!/bin/sh
2
3test_description='Test git check-ref-format'
4
99b6c45d 5TEST_PASSES_SANITIZE_LEAK=true
58a05c74
JN
6. ./test-lib.sh
7
8valid_ref() {
42afe62d
JS
9 prereq=
10 case $1 in
f57a8715 11 [A-Z!]*)
42afe62d
JS
12 prereq=$1
13 shift
14 esac
283b365e
RS
15 desc="ref name '$1' is valid${2:+ with options $2}"
16 test_expect_success $prereq "$desc" "
42afe62d
JS
17 git check-ref-format $2 '$1'
18 "
58a05c74
JN
19}
20invalid_ref() {
42afe62d
JS
21 prereq=
22 case $1 in
f57a8715 23 [A-Z!]*)
42afe62d
JS
24 prereq=$1
25 shift
26 esac
283b365e
RS
27 desc="ref name '$1' is invalid${2:+ with options $2}"
28 test_expect_success $prereq "$desc" "
42afe62d
JS
29 test_must_fail git check-ref-format $2 '$1'
30 "
58a05c74
JN
31}
32
f9b1a5b9 33invalid_ref ''
f57a8715
JH
34invalid_ref !MINGW '/'
35invalid_ref !MINGW '/' --allow-onelevel
36invalid_ref !MINGW '/' --normalize
37invalid_ref !MINGW '/' '--allow-onelevel --normalize'
58a05c74 38valid_ref 'foo/bar/baz'
a40e6fb6
MH
39valid_ref 'foo/bar/baz' --normalize
40invalid_ref 'refs///heads/foo'
41valid_ref 'refs///heads/foo' --normalize
58a05c74 42invalid_ref 'heads/foo/'
f57a8715
JH
43invalid_ref !MINGW '/heads/foo'
44valid_ref !MINGW '/heads/foo' --normalize
a40e6fb6
MH
45invalid_ref '///heads/foo'
46valid_ref '///heads/foo' --normalize
58a05c74 47invalid_ref './foo'
e4ed6105
MH
48invalid_ref './foo/bar'
49invalid_ref 'foo/./bar'
50invalid_ref 'foo/bar/.'
58a05c74 51invalid_ref '.refs/foo'
919eb8ac 52invalid_ref 'refs/heads/foo.'
58a05c74
JN
53invalid_ref 'heads/foo..bar'
54invalid_ref 'heads/foo?bar'
55valid_ref 'foo./bar'
56invalid_ref 'heads/foo.lock'
f9b1a5b9 57invalid_ref 'heads///foo.lock'
7e9d2fe9
MH
58invalid_ref 'foo.lock/bar'
59invalid_ref 'foo.lock///bar'
58a05c74
JN
60valid_ref 'heads/foo@bar'
61invalid_ref 'heads/v@{ation'
62invalid_ref 'heads/foo\bar'
f3738c1c
MH
63invalid_ref "$(printf 'heads/foo\t')"
64invalid_ref "$(printf 'heads/foo\177')"
65valid_ref "$(printf 'heads/fu\303\237')"
cd377f45
JK
66valid_ref 'heads/*foo/bar' --refspec-pattern
67valid_ref 'heads/foo*/bar' --refspec-pattern
68valid_ref 'heads/f*o/bar' --refspec-pattern
69invalid_ref 'heads/f*o*/bar' --refspec-pattern
70invalid_ref 'heads/foo*/bar*' --refspec-pattern
e4ed6105
MH
71
72ref='foo'
73invalid_ref "$ref"
74valid_ref "$ref" --allow-onelevel
75invalid_ref "$ref" --refspec-pattern
76valid_ref "$ref" '--refspec-pattern --allow-onelevel'
a40e6fb6
MH
77invalid_ref "$ref" --normalize
78valid_ref "$ref" '--allow-onelevel --normalize'
e4ed6105
MH
79
80ref='foo/bar'
81valid_ref "$ref"
82valid_ref "$ref" --allow-onelevel
83valid_ref "$ref" --refspec-pattern
84valid_ref "$ref" '--refspec-pattern --allow-onelevel'
a40e6fb6 85valid_ref "$ref" --normalize
e4ed6105
MH
86
87ref='foo/*'
88invalid_ref "$ref"
89invalid_ref "$ref" --allow-onelevel
90valid_ref "$ref" --refspec-pattern
91valid_ref "$ref" '--refspec-pattern --allow-onelevel'
92
93ref='*/foo'
94invalid_ref "$ref"
95invalid_ref "$ref" --allow-onelevel
96valid_ref "$ref" --refspec-pattern
97valid_ref "$ref" '--refspec-pattern --allow-onelevel'
a40e6fb6
MH
98invalid_ref "$ref" --normalize
99valid_ref "$ref" '--refspec-pattern --normalize'
e4ed6105
MH
100
101ref='foo/*/bar'
102invalid_ref "$ref"
103invalid_ref "$ref" --allow-onelevel
104valid_ref "$ref" --refspec-pattern
105valid_ref "$ref" '--refspec-pattern --allow-onelevel'
106
107ref='*'
108invalid_ref "$ref"
8d9c5010 109invalid_ref "$ref" --allow-onelevel
e4ed6105
MH
110invalid_ref "$ref" --refspec-pattern
111valid_ref "$ref" '--refspec-pattern --allow-onelevel'
112
113ref='foo/*/*'
114invalid_ref "$ref" --refspec-pattern
115invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
116
117ref='*/foo/*'
118invalid_ref "$ref" --refspec-pattern
119invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
120
121ref='*/*/foo'
122invalid_ref "$ref" --refspec-pattern
123invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
124
125ref='/foo'
f57a8715
JH
126invalid_ref !MINGW "$ref"
127invalid_ref !MINGW "$ref" --allow-onelevel
128invalid_ref !MINGW "$ref" --refspec-pattern
129invalid_ref !MINGW "$ref" '--refspec-pattern --allow-onelevel'
130invalid_ref !MINGW "$ref" --normalize
131valid_ref !MINGW "$ref" '--allow-onelevel --normalize'
132invalid_ref !MINGW "$ref" '--refspec-pattern --normalize'
133valid_ref !MINGW "$ref" '--refspec-pattern --allow-onelevel --normalize'
58a05c74
JN
134
135test_expect_success "check-ref-format --branch @{-1}" '
136 T=$(git write-tree) &&
137 sha1=$(echo A | git commit-tree $T) &&
06d53148
JS
138 git update-ref refs/heads/main $sha1 &&
139 git update-ref refs/remotes/origin/main $sha1 &&
140 git checkout main &&
141 git checkout origin/main &&
142 git checkout main &&
58a05c74
JN
143 refname=$(git check-ref-format --branch @{-1}) &&
144 test "$refname" = "$sha1" &&
145 refname2=$(git check-ref-format --branch @{-2}) &&
06d53148 146 test "$refname2" = main'
58a05c74 147
06d53148
JS
148test_expect_success 'check-ref-format --branch -nain' '
149 test_must_fail git check-ref-format --branch -nain >actual &&
7c3f847a
JH
150 test_must_be_empty actual
151'
152
49cc460d
JN
153test_expect_success 'check-ref-format --branch from subdir' '
154 mkdir subdir &&
155
156 T=$(git write-tree) &&
157 sha1=$(echo A | git commit-tree $T) &&
06d53148
JS
158 git update-ref refs/heads/main $sha1 &&
159 git update-ref refs/remotes/origin/main $sha1 &&
160 git checkout main &&
161 git checkout origin/main &&
162 git checkout main &&
49cc460d
JN
163 refname=$(
164 cd subdir &&
165 git check-ref-format --branch @{-1}
166 ) &&
167 test "$refname" = "$sha1"
168'
169
7c3f847a
JH
170test_expect_success 'check-ref-format --branch @{-1} from non-repo' '
171 nongit test_must_fail git check-ref-format --branch @{-1} >actual &&
172 test_must_be_empty actual
173'
174
06d53148
JS
175test_expect_success 'check-ref-format --branch main from non-repo' '
176 echo main >expect &&
177 nongit git check-ref-format --branch main >actual &&
7c3f847a
JH
178 test_cmp expect actual
179'
180
38eedc63 181valid_ref_normalized() {
42afe62d
JS
182 prereq=
183 case $1 in
f57a8715 184 [A-Z!]*)
42afe62d
JS
185 prereq=$1
186 shift
187 esac
188 test_expect_success $prereq "ref name '$1' simplifies to '$2'" "
a40e6fb6 189 refname=\$(git check-ref-format --normalize '$1') &&
42afe62d
JS
190 test \"\$refname\" = '$2'
191 "
38eedc63
JH
192}
193invalid_ref_normalized() {
42afe62d
JS
194 prereq=
195 case $1 in
f57a8715 196 [A-Z!]*)
42afe62d
JS
197 prereq=$1
198 shift
199 esac
200 test_expect_success $prereq "check-ref-format --normalize rejects '$1'" "
201 test_must_fail git check-ref-format --normalize '$1'
202 "
38eedc63
JH
203}
204
205valid_ref_normalized 'heads/foo' 'heads/foo'
206valid_ref_normalized 'refs///heads/foo' 'refs/heads/foo'
f57a8715 207valid_ref_normalized !MINGW '/heads/foo' 'heads/foo'
2f633f41 208valid_ref_normalized '///heads/foo' 'heads/foo'
38eedc63 209invalid_ref_normalized 'foo'
f57a8715 210invalid_ref_normalized !MINGW '/foo'
38eedc63
JH
211invalid_ref_normalized 'heads/foo/../bar'
212invalid_ref_normalized 'heads/./foo'
213invalid_ref_normalized 'heads\foo'
f9b1a5b9
MH
214invalid_ref_normalized 'heads/foo.lock'
215invalid_ref_normalized 'heads///foo.lock'
7e9d2fe9
MH
216invalid_ref_normalized 'foo.lock/bar'
217invalid_ref_normalized 'foo.lock///bar'
38eedc63 218
58a05c74 219test_done