]>
Commit | Line | Data |
---|---|---|
58a05c74 JN |
1 | #!/bin/sh |
2 | ||
3 | test_description='Test git check-ref-format' | |
4 | ||
99b6c45d | 5 | TEST_PASSES_SANITIZE_LEAK=true |
58a05c74 JN |
6 | . ./test-lib.sh |
7 | ||
8 | valid_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 | } |
20 | invalid_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 | 33 | invalid_ref '' |
f57a8715 JH |
34 | invalid_ref !MINGW '/' |
35 | invalid_ref !MINGW '/' --allow-onelevel | |
36 | invalid_ref !MINGW '/' --normalize | |
37 | invalid_ref !MINGW '/' '--allow-onelevel --normalize' | |
58a05c74 | 38 | valid_ref 'foo/bar/baz' |
a40e6fb6 MH |
39 | valid_ref 'foo/bar/baz' --normalize |
40 | invalid_ref 'refs///heads/foo' | |
41 | valid_ref 'refs///heads/foo' --normalize | |
58a05c74 | 42 | invalid_ref 'heads/foo/' |
f57a8715 JH |
43 | invalid_ref !MINGW '/heads/foo' |
44 | valid_ref !MINGW '/heads/foo' --normalize | |
a40e6fb6 MH |
45 | invalid_ref '///heads/foo' |
46 | valid_ref '///heads/foo' --normalize | |
58a05c74 | 47 | invalid_ref './foo' |
e4ed6105 MH |
48 | invalid_ref './foo/bar' |
49 | invalid_ref 'foo/./bar' | |
50 | invalid_ref 'foo/bar/.' | |
58a05c74 | 51 | invalid_ref '.refs/foo' |
919eb8ac | 52 | invalid_ref 'refs/heads/foo.' |
58a05c74 JN |
53 | invalid_ref 'heads/foo..bar' |
54 | invalid_ref 'heads/foo?bar' | |
55 | valid_ref 'foo./bar' | |
56 | invalid_ref 'heads/foo.lock' | |
f9b1a5b9 | 57 | invalid_ref 'heads///foo.lock' |
7e9d2fe9 MH |
58 | invalid_ref 'foo.lock/bar' |
59 | invalid_ref 'foo.lock///bar' | |
58a05c74 JN |
60 | valid_ref 'heads/foo@bar' |
61 | invalid_ref 'heads/v@{ation' | |
62 | invalid_ref 'heads/foo\bar' | |
f3738c1c MH |
63 | invalid_ref "$(printf 'heads/foo\t')" |
64 | invalid_ref "$(printf 'heads/foo\177')" | |
65 | valid_ref "$(printf 'heads/fu\303\237')" | |
cd377f45 JK |
66 | valid_ref 'heads/*foo/bar' --refspec-pattern |
67 | valid_ref 'heads/foo*/bar' --refspec-pattern | |
68 | valid_ref 'heads/f*o/bar' --refspec-pattern | |
69 | invalid_ref 'heads/f*o*/bar' --refspec-pattern | |
70 | invalid_ref 'heads/foo*/bar*' --refspec-pattern | |
e4ed6105 MH |
71 | |
72 | ref='foo' | |
73 | invalid_ref "$ref" | |
74 | valid_ref "$ref" --allow-onelevel | |
75 | invalid_ref "$ref" --refspec-pattern | |
76 | valid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
a40e6fb6 MH |
77 | invalid_ref "$ref" --normalize |
78 | valid_ref "$ref" '--allow-onelevel --normalize' | |
e4ed6105 MH |
79 | |
80 | ref='foo/bar' | |
81 | valid_ref "$ref" | |
82 | valid_ref "$ref" --allow-onelevel | |
83 | valid_ref "$ref" --refspec-pattern | |
84 | valid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
a40e6fb6 | 85 | valid_ref "$ref" --normalize |
e4ed6105 MH |
86 | |
87 | ref='foo/*' | |
88 | invalid_ref "$ref" | |
89 | invalid_ref "$ref" --allow-onelevel | |
90 | valid_ref "$ref" --refspec-pattern | |
91 | valid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
92 | ||
93 | ref='*/foo' | |
94 | invalid_ref "$ref" | |
95 | invalid_ref "$ref" --allow-onelevel | |
96 | valid_ref "$ref" --refspec-pattern | |
97 | valid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
a40e6fb6 MH |
98 | invalid_ref "$ref" --normalize |
99 | valid_ref "$ref" '--refspec-pattern --normalize' | |
e4ed6105 MH |
100 | |
101 | ref='foo/*/bar' | |
102 | invalid_ref "$ref" | |
103 | invalid_ref "$ref" --allow-onelevel | |
104 | valid_ref "$ref" --refspec-pattern | |
105 | valid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
106 | ||
107 | ref='*' | |
108 | invalid_ref "$ref" | |
8d9c5010 | 109 | invalid_ref "$ref" --allow-onelevel |
e4ed6105 MH |
110 | invalid_ref "$ref" --refspec-pattern |
111 | valid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
112 | ||
113 | ref='foo/*/*' | |
114 | invalid_ref "$ref" --refspec-pattern | |
115 | invalid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
116 | ||
117 | ref='*/foo/*' | |
118 | invalid_ref "$ref" --refspec-pattern | |
119 | invalid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
120 | ||
121 | ref='*/*/foo' | |
122 | invalid_ref "$ref" --refspec-pattern | |
123 | invalid_ref "$ref" '--refspec-pattern --allow-onelevel' | |
124 | ||
125 | ref='/foo' | |
f57a8715 JH |
126 | invalid_ref !MINGW "$ref" |
127 | invalid_ref !MINGW "$ref" --allow-onelevel | |
128 | invalid_ref !MINGW "$ref" --refspec-pattern | |
129 | invalid_ref !MINGW "$ref" '--refspec-pattern --allow-onelevel' | |
130 | invalid_ref !MINGW "$ref" --normalize | |
131 | valid_ref !MINGW "$ref" '--allow-onelevel --normalize' | |
132 | invalid_ref !MINGW "$ref" '--refspec-pattern --normalize' | |
133 | valid_ref !MINGW "$ref" '--refspec-pattern --allow-onelevel --normalize' | |
58a05c74 JN |
134 | |
135 | test_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 |
148 | test_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 |
153 | test_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 |
170 | test_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 |
175 | test_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 | 181 | valid_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 | } |
193 | invalid_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 | ||
205 | valid_ref_normalized 'heads/foo' 'heads/foo' | |
206 | valid_ref_normalized 'refs///heads/foo' 'refs/heads/foo' | |
f57a8715 | 207 | valid_ref_normalized !MINGW '/heads/foo' 'heads/foo' |
2f633f41 | 208 | valid_ref_normalized '///heads/foo' 'heads/foo' |
38eedc63 | 209 | invalid_ref_normalized 'foo' |
f57a8715 | 210 | invalid_ref_normalized !MINGW '/foo' |
38eedc63 JH |
211 | invalid_ref_normalized 'heads/foo/../bar' |
212 | invalid_ref_normalized 'heads/./foo' | |
213 | invalid_ref_normalized 'heads\foo' | |
f9b1a5b9 MH |
214 | invalid_ref_normalized 'heads/foo.lock' |
215 | invalid_ref_normalized 'heads///foo.lock' | |
7e9d2fe9 MH |
216 | invalid_ref_normalized 'foo.lock/bar' |
217 | invalid_ref_normalized 'foo.lock///bar' | |
38eedc63 | 218 | |
58a05c74 | 219 | test_done |