blob: e5dc62e9efbf9c26bad93c7384f9fb9fa6a970e8 [file] [log] [blame]
Jonathan Nieder58a05c72009-10-12 00:27:04 -05001#!/bin/sh
2
3test_description='Test git check-ref-format'
4
5. ./test-lib.sh
6
7valid_ref() {
Johannes Sixt42afe622011-10-13 10:06:20 +02008 prereq=
9 case $1 in
Junio C Hamanof57a8712014-07-21 15:09:27 -070010 [A-Z!]*)
Johannes Sixt42afe622011-10-13 10:06:20 +020011 prereq=$1
12 shift
13 esac
René Scharfe283b3652013-01-08 21:23:01 +010014 desc="ref name '$1' is valid${2:+ with options $2}"
15 test_expect_success $prereq "$desc" "
Johannes Sixt42afe622011-10-13 10:06:20 +020016 git check-ref-format $2 '$1'
17 "
Jonathan Nieder58a05c72009-10-12 00:27:04 -050018}
19invalid_ref() {
Johannes Sixt42afe622011-10-13 10:06:20 +020020 prereq=
21 case $1 in
Junio C Hamanof57a8712014-07-21 15:09:27 -070022 [A-Z!]*)
Johannes Sixt42afe622011-10-13 10:06:20 +020023 prereq=$1
24 shift
25 esac
René Scharfe283b3652013-01-08 21:23:01 +010026 desc="ref name '$1' is invalid${2:+ with options $2}"
27 test_expect_success $prereq "$desc" "
Johannes Sixt42afe622011-10-13 10:06:20 +020028 test_must_fail git check-ref-format $2 '$1'
29 "
Jonathan Nieder58a05c72009-10-12 00:27:04 -050030}
31
Michael Haggertyf9b1a5b2011-09-15 23:10:22 +020032invalid_ref ''
Junio C Hamanof57a8712014-07-21 15:09:27 -070033invalid_ref !MINGW '/'
34invalid_ref !MINGW '/' --allow-onelevel
35invalid_ref !MINGW '/' --normalize
36invalid_ref !MINGW '/' '--allow-onelevel --normalize'
Jonathan Nieder58a05c72009-10-12 00:27:04 -050037valid_ref 'foo/bar/baz'
Michael Haggertya40e6fb2011-09-15 23:10:30 +020038valid_ref 'foo/bar/baz' --normalize
39invalid_ref 'refs///heads/foo'
40valid_ref 'refs///heads/foo' --normalize
Jonathan Nieder58a05c72009-10-12 00:27:04 -050041invalid_ref 'heads/foo/'
Junio C Hamanof57a8712014-07-21 15:09:27 -070042invalid_ref !MINGW '/heads/foo'
43valid_ref !MINGW '/heads/foo' --normalize
Michael Haggertya40e6fb2011-09-15 23:10:30 +020044invalid_ref '///heads/foo'
45valid_ref '///heads/foo' --normalize
Jonathan Nieder58a05c72009-10-12 00:27:04 -050046invalid_ref './foo'
Michael Haggertye4ed6102011-09-15 23:10:23 +020047invalid_ref './foo/bar'
48invalid_ref 'foo/./bar'
49invalid_ref 'foo/bar/.'
Jonathan Nieder58a05c72009-10-12 00:27:04 -050050invalid_ref '.refs/foo'
Jeff King919eb8a2014-07-28 11:48:11 -040051invalid_ref 'refs/heads/foo.'
Jonathan Nieder58a05c72009-10-12 00:27:04 -050052invalid_ref 'heads/foo..bar'
53invalid_ref 'heads/foo?bar'
54valid_ref 'foo./bar'
55invalid_ref 'heads/foo.lock'
Michael Haggertyf9b1a5b2011-09-15 23:10:22 +020056invalid_ref 'heads///foo.lock'
Michael Haggerty7e9d2fe2011-09-15 23:10:27 +020057invalid_ref 'foo.lock/bar'
58invalid_ref 'foo.lock///bar'
Jonathan Nieder58a05c72009-10-12 00:27:04 -050059valid_ref 'heads/foo@bar'
60invalid_ref 'heads/v@{ation'
61invalid_ref 'heads/foo\bar'
Michael Haggertyf3738c12011-08-27 06:12:44 +020062invalid_ref "$(printf 'heads/foo\t')"
63invalid_ref "$(printf 'heads/foo\177')"
64valid_ref "$(printf 'heads/fu\303\237')"
Michael Haggertye4ed6102011-09-15 23:10:23 +020065invalid_ref 'heads/*foo/bar' --refspec-pattern
66invalid_ref 'heads/foo*/bar' --refspec-pattern
67invalid_ref 'heads/f*o/bar' --refspec-pattern
68
69ref='foo'
70invalid_ref "$ref"
71valid_ref "$ref" --allow-onelevel
72invalid_ref "$ref" --refspec-pattern
73valid_ref "$ref" '--refspec-pattern --allow-onelevel'
Michael Haggertya40e6fb2011-09-15 23:10:30 +020074invalid_ref "$ref" --normalize
75valid_ref "$ref" '--allow-onelevel --normalize'
Michael Haggertye4ed6102011-09-15 23:10:23 +020076
77ref='foo/bar'
78valid_ref "$ref"
79valid_ref "$ref" --allow-onelevel
80valid_ref "$ref" --refspec-pattern
81valid_ref "$ref" '--refspec-pattern --allow-onelevel'
Michael Haggertya40e6fb2011-09-15 23:10:30 +020082valid_ref "$ref" --normalize
Michael Haggertye4ed6102011-09-15 23:10:23 +020083
84ref='foo/*'
85invalid_ref "$ref"
86invalid_ref "$ref" --allow-onelevel
87valid_ref "$ref" --refspec-pattern
88valid_ref "$ref" '--refspec-pattern --allow-onelevel'
89
90ref='*/foo'
91invalid_ref "$ref"
92invalid_ref "$ref" --allow-onelevel
93valid_ref "$ref" --refspec-pattern
94valid_ref "$ref" '--refspec-pattern --allow-onelevel'
Michael Haggertya40e6fb2011-09-15 23:10:30 +020095invalid_ref "$ref" --normalize
96valid_ref "$ref" '--refspec-pattern --normalize'
Michael Haggertye4ed6102011-09-15 23:10:23 +020097
98ref='foo/*/bar'
99invalid_ref "$ref"
100invalid_ref "$ref" --allow-onelevel
101valid_ref "$ref" --refspec-pattern
102valid_ref "$ref" '--refspec-pattern --allow-onelevel'
103
104ref='*'
105invalid_ref "$ref"
Michael Haggerty8d9c5012011-09-15 23:10:25 +0200106invalid_ref "$ref" --allow-onelevel
Michael Haggertye4ed6102011-09-15 23:10:23 +0200107invalid_ref "$ref" --refspec-pattern
108valid_ref "$ref" '--refspec-pattern --allow-onelevel'
109
110ref='foo/*/*'
111invalid_ref "$ref" --refspec-pattern
112invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
113
114ref='*/foo/*'
115invalid_ref "$ref" --refspec-pattern
116invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
117
118ref='*/*/foo'
119invalid_ref "$ref" --refspec-pattern
120invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
121
122ref='/foo'
Junio C Hamanof57a8712014-07-21 15:09:27 -0700123invalid_ref !MINGW "$ref"
124invalid_ref !MINGW "$ref" --allow-onelevel
125invalid_ref !MINGW "$ref" --refspec-pattern
126invalid_ref !MINGW "$ref" '--refspec-pattern --allow-onelevel'
127invalid_ref !MINGW "$ref" --normalize
128valid_ref !MINGW "$ref" '--allow-onelevel --normalize'
129invalid_ref !MINGW "$ref" '--refspec-pattern --normalize'
130valid_ref !MINGW "$ref" '--refspec-pattern --allow-onelevel --normalize'
Jonathan Nieder58a05c72009-10-12 00:27:04 -0500131
132test_expect_success "check-ref-format --branch @{-1}" '
133 T=$(git write-tree) &&
134 sha1=$(echo A | git commit-tree $T) &&
135 git update-ref refs/heads/master $sha1 &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -0500136 git update-ref refs/remotes/origin/master $sha1 &&
Jonathan Nieder58a05c72009-10-12 00:27:04 -0500137 git checkout master &&
138 git checkout origin/master &&
139 git checkout master &&
140 refname=$(git check-ref-format --branch @{-1}) &&
141 test "$refname" = "$sha1" &&
142 refname2=$(git check-ref-format --branch @{-2}) &&
143 test "$refname2" = master'
144
Jonathan Nieder49cc4602010-08-05 22:39:22 -0500145test_expect_success 'check-ref-format --branch from subdir' '
146 mkdir subdir &&
147
148 T=$(git write-tree) &&
149 sha1=$(echo A | git commit-tree $T) &&
150 git update-ref refs/heads/master $sha1 &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -0500151 git update-ref refs/remotes/origin/master $sha1 &&
Jonathan Nieder49cc4602010-08-05 22:39:22 -0500152 git checkout master &&
153 git checkout origin/master &&
154 git checkout master &&
155 refname=$(
156 cd subdir &&
157 git check-ref-format --branch @{-1}
158 ) &&
159 test "$refname" = "$sha1"
160'
161
Junio C Hamano38eedc62009-10-12 16:39:43 -0700162valid_ref_normalized() {
Johannes Sixt42afe622011-10-13 10:06:20 +0200163 prereq=
164 case $1 in
Junio C Hamanof57a8712014-07-21 15:09:27 -0700165 [A-Z!]*)
Johannes Sixt42afe622011-10-13 10:06:20 +0200166 prereq=$1
167 shift
168 esac
169 test_expect_success $prereq "ref name '$1' simplifies to '$2'" "
Michael Haggertya40e6fb2011-09-15 23:10:30 +0200170 refname=\$(git check-ref-format --normalize '$1') &&
Johannes Sixt42afe622011-10-13 10:06:20 +0200171 test \"\$refname\" = '$2'
172 "
Junio C Hamano38eedc62009-10-12 16:39:43 -0700173}
174invalid_ref_normalized() {
Johannes Sixt42afe622011-10-13 10:06:20 +0200175 prereq=
176 case $1 in
Junio C Hamanof57a8712014-07-21 15:09:27 -0700177 [A-Z!]*)
Johannes Sixt42afe622011-10-13 10:06:20 +0200178 prereq=$1
179 shift
180 esac
181 test_expect_success $prereq "check-ref-format --normalize rejects '$1'" "
182 test_must_fail git check-ref-format --normalize '$1'
183 "
Junio C Hamano38eedc62009-10-12 16:39:43 -0700184}
185
186valid_ref_normalized 'heads/foo' 'heads/foo'
187valid_ref_normalized 'refs///heads/foo' 'refs/heads/foo'
Junio C Hamanof57a8712014-07-21 15:09:27 -0700188valid_ref_normalized !MINGW '/heads/foo' 'heads/foo'
Michael Haggerty2f633f42011-08-25 21:19:24 +0200189valid_ref_normalized '///heads/foo' 'heads/foo'
Junio C Hamano38eedc62009-10-12 16:39:43 -0700190invalid_ref_normalized 'foo'
Junio C Hamanof57a8712014-07-21 15:09:27 -0700191invalid_ref_normalized !MINGW '/foo'
Junio C Hamano38eedc62009-10-12 16:39:43 -0700192invalid_ref_normalized 'heads/foo/../bar'
193invalid_ref_normalized 'heads/./foo'
194invalid_ref_normalized 'heads\foo'
Michael Haggertyf9b1a5b2011-09-15 23:10:22 +0200195invalid_ref_normalized 'heads/foo.lock'
196invalid_ref_normalized 'heads///foo.lock'
Michael Haggerty7e9d2fe2011-09-15 23:10:27 +0200197invalid_ref_normalized 'foo.lock/bar'
198invalid_ref_normalized 'foo.lock///bar'
Junio C Hamano38eedc62009-10-12 16:39:43 -0700199
Jonathan Nieder58a05c72009-10-12 00:27:04 -0500200test_done