158
done
159
'
160
161
+test_expect_success 'regular ref content should be checked (individual)' '
162
+ test_when_finished "rm -rf repo" &&
163
+ git init repo &&
164
+ branch_dir_prefix=.git/refs/heads &&
165
+ cd repo &&
166
+ test_commit default &&
167
+ mkdir -p "$branch_dir_prefix/a/b" &&
168
+
169
+ git refs verify 2>err &&
170
+ test_must_be_empty err &&
171
+
172
+ for bad_content in "$(git rev-parse main)x" "xfsazqfxcadas" "Xfsazqfxcadas"
173
+ do
174
+ printf "%s" $bad_content >$branch_dir_prefix/branch-bad &&
175
+ test_must_fail git refs verify 2>err &&
176
+ cat >expect <<-EOF &&
177
+ error: refs/heads/branch-bad: badRefContent: $bad_content
178
+ EOF
179
+ rm $branch_dir_prefix/branch-bad &&
180
+ test_cmp expect err || return 1
181
+ done &&
182
+
183
+ for bad_content in "$(git rev-parse main)x" "xfsazqfxcadas" "Xfsazqfxcadas"
184
+ do
185
+ printf "%s" $bad_content >$branch_dir_prefix/a/b/branch-bad &&
186
+ test_must_fail git refs verify 2>err &&
187
+ cat >expect <<-EOF &&
188
+ error: refs/heads/a/b/branch-bad: badRefContent: $bad_content
189
+ EOF
190
+ rm $branch_dir_prefix/a/b/branch-bad &&
191
+ test_cmp expect err || return 1
192
+ done
193
+'
194
+
195
+test_expect_success 'regular ref content should be checked (aggregate)' '
196
+ test_when_finished "rm -rf repo" &&
197
+ git init repo &&
198
+ branch_dir_prefix=.git/refs/heads &&
199
+ tag_dir_prefix=.git/refs/tags &&
200
+ cd repo &&
201
+ test_commit default &&
202
+ mkdir -p "$branch_dir_prefix/a/b" &&
203
+
204
+ bad_content_1=$(git rev-parse main)x &&
205
+ bad_content_2=xfsazqfxcadas &&
206
+ bad_content_3=Xfsazqfxcadas &&
207
+ printf "%s" $bad_content_1 >$tag_dir_prefix/tag-bad-1 &&
208
+ printf "%s" $bad_content_2 >$tag_dir_prefix/tag-bad-2 &&
209
+ printf "%s" $bad_content_3 >$branch_dir_prefix/a/b/branch-bad &&
210
+
211
+ test_must_fail git refs verify 2>err &&
212
+ cat >expect <<-EOF &&
213
+ error: refs/heads/a/b/branch-bad: badRefContent: $bad_content_3
214
+ error: refs/tags/tag-bad-1: badRefContent: $bad_content_1
215
+ error: refs/tags/tag-bad-2: badRefContent: $bad_content_2
216
+ EOF
217
+ sort err >sorted_err &&
218
+ test_cmp expect sorted_err
219
+'
220
+
221
+test_expect_success 'ref content checks should work with worktrees' '
222
+ test_when_finished "rm -rf repo" &&
223
+ git init repo &&
224
+ cd repo &&
225
+ test_commit default &&
226
+ git branch branch-1 &&
227
+ git branch branch-2 &&
228
+ git branch branch-3 &&
229
+ git worktree add ./worktree-1 branch-2 &&
230
+ git worktree add ./worktree-2 branch-3 &&
231
+ worktree1_refdir_prefix=.git/worktrees/worktree-1/refs/worktree &&
232
+ worktree2_refdir_prefix=.git/worktrees/worktree-2/refs/worktree &&
233
+
234
+ (
235
+ cd worktree-1 &&
236
+ git update-ref refs/worktree/branch-4 refs/heads/branch-1
237
+ ) &&
238
+ (
239
+ cd worktree-2 &&
240
+ git update-ref refs/worktree/branch-4 refs/heads/branch-1
241
+ ) &&
242
+
243
+ for bad_content in "$(git rev-parse HEAD)x" "xfsazqfxcadas" "Xfsazqfxcadas"
244
+ do
245
+ printf "%s" $bad_content >$worktree1_refdir_prefix/bad-branch-1 &&
246
+ test_must_fail git refs verify 2>err &&
247
+ cat >expect <<-EOF &&
248
+ error: worktrees/worktree-1/refs/worktree/bad-branch-1: badRefContent: $bad_content
249
+ EOF
250
+ rm $worktree1_refdir_prefix/bad-branch-1 &&
251
+ test_cmp expect err || return 1
252
+ done &&
253
+
254
+ for bad_content in "$(git rev-parse HEAD)x" "xfsazqfxcadas" "Xfsazqfxcadas"
255
+ do
256
+ printf "%s" $bad_content >$worktree2_refdir_prefix/bad-branch-2 &&
257
+ test_must_fail git refs verify 2>err &&
258
+ cat >expect <<-EOF &&
259
+ error: worktrees/worktree-2/refs/worktree/bad-branch-2: badRefContent: $bad_content
260
+ EOF
261
+ rm $worktree2_refdir_prefix/bad-branch-2 &&
262
+ test_cmp expect err || return 1
263
+ done
264
+'
265
+
266
test_done