3 test_description
='Test git check-ref-format'
10 test_expect_success
"ref name '$1' is valid" \
11 "git check-ref-format '$1'"
13 test_expect_success
"ref name '$1' is valid with options $2" \
14 "git check-ref-format $2 '$1'"
20 test_expect_success
"ref name '$1' is invalid" \
21 "test_must_fail git check-ref-format '$1'"
23 test_expect_success
"ref name '$1' is invalid with options $2" \
24 "test_must_fail git check-ref-format $2 '$1'"
30 invalid_ref
'/' --allow-onelevel
31 valid_ref
'foo/bar/baz'
32 valid_ref
'refs///heads/foo'
33 invalid_ref
'heads/foo/'
34 valid_ref
'/heads/foo'
35 valid_ref
'///heads/foo'
37 invalid_ref
'./foo/bar'
38 invalid_ref
'foo/./bar'
39 invalid_ref
'foo/bar/.'
40 invalid_ref
'.refs/foo'
41 invalid_ref
'heads/foo..bar'
42 invalid_ref
'heads/foo?bar'
44 invalid_ref
'heads/foo.lock'
45 invalid_ref
'heads///foo.lock'
46 invalid_ref
'foo.lock/bar'
47 invalid_ref
'foo.lock///bar'
48 valid_ref
'heads/foo@bar'
49 invalid_ref
'heads/v@{ation'
50 invalid_ref
'heads/foo\bar'
51 invalid_ref
"$(printf 'heads/foo\t')"
52 invalid_ref
"$(printf 'heads/foo\177')"
53 valid_ref
"$(printf 'heads/fu\303\237')"
54 invalid_ref
'heads/*foo/bar' --refspec-pattern
55 invalid_ref
'heads/foo*/bar' --refspec-pattern
56 invalid_ref
'heads/f*o/bar' --refspec-pattern
60 valid_ref
"$ref" --allow-onelevel
61 invalid_ref
"$ref" --refspec-pattern
62 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
66 valid_ref
"$ref" --allow-onelevel
67 valid_ref
"$ref" --refspec-pattern
68 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
72 invalid_ref
"$ref" --allow-onelevel
73 valid_ref
"$ref" --refspec-pattern
74 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
78 invalid_ref
"$ref" --allow-onelevel
79 valid_ref
"$ref" --refspec-pattern
80 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
84 invalid_ref
"$ref" --allow-onelevel
85 valid_ref
"$ref" --refspec-pattern
86 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
90 invalid_ref
"$ref" --allow-onelevel
91 invalid_ref
"$ref" --refspec-pattern
92 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
95 invalid_ref
"$ref" --refspec-pattern
96 invalid_ref
"$ref" '--refspec-pattern --allow-onelevel'
99 invalid_ref
"$ref" --refspec-pattern
100 invalid_ref
"$ref" '--refspec-pattern --allow-onelevel'
103 invalid_ref
"$ref" --refspec-pattern
104 invalid_ref
"$ref" '--refspec-pattern --allow-onelevel'
108 valid_ref
"$ref" --allow-onelevel
109 invalid_ref
"$ref" --refspec-pattern
110 valid_ref
"$ref" '--refspec-pattern --allow-onelevel'
112 test_expect_success
"check-ref-format --branch @{-1}" '
113 T=$(git write-tree) &&
114 sha1=$(echo A | git commit-tree $T) &&
115 git update-ref refs/heads/master $sha1 &&
116 git update-ref refs/remotes/origin/master $sha1 &&
117 git checkout master &&
118 git checkout origin/master &&
119 git checkout master &&
120 refname=$(git check-ref-format --branch @{-1}) &&
121 test "$refname" = "$sha1" &&
122 refname2=$(git check-ref-format --branch @{-2}) &&
123 test "$refname2" = master'
125 test_expect_success
'check-ref-format --branch from subdir' '
128 T=$(git write-tree) &&
129 sha1=$(echo A | git commit-tree $T) &&
130 git update-ref refs/heads/master $sha1 &&
131 git update-ref refs/remotes/origin/master $sha1 &&
132 git checkout master &&
133 git checkout origin/master &&
134 git checkout master &&
137 git check-ref-format --branch @{-1}
139 test "$refname" = "$sha1"
142 valid_ref_normalized
() {
143 test_expect_success
"ref name '$1' simplifies to '$2'" "
144 refname=\$(git check-ref-format --print '$1') &&
145 test \"\$refname\" = '$2'"
147 invalid_ref_normalized
() {
148 test_expect_success
"check-ref-format --print rejects '$1'" "
149 test_must_fail git check-ref-format --print '$1'"
152 valid_ref_normalized
'heads/foo' 'heads/foo'
153 valid_ref_normalized
'refs///heads/foo' 'refs/heads/foo'
154 valid_ref_normalized
'/heads/foo' 'heads/foo'
155 valid_ref_normalized
'///heads/foo' 'heads/foo'
156 invalid_ref_normalized
'foo'
157 invalid_ref_normalized
'/foo'
158 invalid_ref_normalized
'heads/foo/../bar'
159 invalid_ref_normalized
'heads/./foo'
160 invalid_ref_normalized
'heads\foo'
161 invalid_ref_normalized
'heads/foo.lock'
162 invalid_ref_normalized
'heads///foo.lock'
163 invalid_ref_normalized
'foo.lock/bar'
164 invalid_ref_normalized
'foo.lock///bar'