395
done
396
'
397
398
+test_expect_success SYMLINKS 'symlink symref content should be checked' '
399
+ test_when_finished "rm -rf repo" &&
400
+ git init repo &&
401
+ branch_dir_prefix=.git/refs/heads &&
402
+ tag_dir_prefix=.git/refs/tags &&
403
+ cd repo &&
404
+ test_commit default &&
405
+ mkdir -p "$branch_dir_prefix/a/b" &&
406
+
407
+ ln -sf ./main $branch_dir_prefix/branch-symbolic-good &&
408
+ git refs verify 2>err &&
409
+ cat >expect <<-EOF &&
410
+ warning: refs/heads/branch-symbolic-good: symlinkRef: use deprecated symbolic link for symref
411
+ EOF
412
+ rm $branch_dir_prefix/branch-symbolic-good &&
413
+ test_cmp expect err &&
414
+
415
+ ln -sf ../../logs/branch-escape $branch_dir_prefix/branch-symbolic &&
416
+ git refs verify 2>err &&
417
+ cat >expect <<-EOF &&
418
+ warning: refs/heads/branch-symbolic: symlinkRef: use deprecated symbolic link for symref
419
+ warning: refs/heads/branch-symbolic: symrefTargetIsNotARef: points to non-ref target '\''logs/branch-escape'\''
420
+ EOF
421
+ rm $branch_dir_prefix/branch-symbolic &&
422
+ test_cmp expect err &&
423
+
424
+ ln -sf ./"branch " $branch_dir_prefix/branch-symbolic-bad &&
425
+ test_must_fail git refs verify 2>err &&
426
+ cat >expect <<-EOF &&
427
+ warning: refs/heads/branch-symbolic-bad: symlinkRef: use deprecated symbolic link for symref
428
+ error: refs/heads/branch-symbolic-bad: badReferentName: points to invalid refname '\''refs/heads/branch '\''
429
+ EOF
430
+ rm $branch_dir_prefix/branch-symbolic-bad &&
431
+ test_cmp expect err &&
432
+
433
+ ln -sf ./".tag" $tag_dir_prefix/tag-symbolic-1 &&
434
+ test_must_fail git refs verify 2>err &&
435
+ cat >expect <<-EOF &&
436
+ warning: refs/tags/tag-symbolic-1: symlinkRef: use deprecated symbolic link for symref
437
+ error: refs/tags/tag-symbolic-1: badReferentName: points to invalid refname '\''refs/tags/.tag'\''
438
+ EOF
439
+ rm $tag_dir_prefix/tag-symbolic-1 &&
440
+ test_cmp expect err
441
+'
442
+
443
+test_expect_success SYMLINKS 'symlink symref content should be checked (worktree)' '
444
+ test_when_finished "rm -rf repo" &&
445
+ git init repo &&
446
+ cd repo &&
447
+ test_commit default &&
448
+ git branch branch-1 &&
449
+ git branch branch-2 &&
450
+ git branch branch-3 &&
451
+ git worktree add ./worktree-1 branch-2 &&
452
+ git worktree add ./worktree-2 branch-3 &&
453
+ main_worktree_refdir_prefix=.git/refs/heads &&
454
+ worktree1_refdir_prefix=.git/worktrees/worktree-1/refs/worktree &&
455
+ worktree2_refdir_prefix=.git/worktrees/worktree-2/refs/worktree &&
456
+
457
+ (
458
+ cd worktree-1 &&
459
+ git update-ref refs/worktree/branch-4 refs/heads/branch-1
460
+ ) &&
461
+ (
462
+ cd worktree-2 &&
463
+ git update-ref refs/worktree/branch-4 refs/heads/branch-1
464
+ ) &&
465
+
466
+ ln -sf ../../../../refs/heads/good-branch $worktree1_refdir_prefix/branch-symbolic-good &&
467
+ git refs verify 2>err &&
468
+ cat >expect <<-EOF &&
469
+ warning: worktrees/worktree-1/refs/worktree/branch-symbolic-good: symlinkRef: use deprecated symbolic link for symref
470
+ EOF
471
+ rm $worktree1_refdir_prefix/branch-symbolic-good &&
472
+ test_cmp expect err &&
473
+
474
+ ln -sf ../../../../worktrees/worktree-1/good-branch $worktree2_refdir_prefix/branch-symbolic-good &&
475
+ git refs verify 2>err &&
476
+ cat >expect <<-EOF &&
477
+ warning: worktrees/worktree-2/refs/worktree/branch-symbolic-good: symlinkRef: use deprecated symbolic link for symref
478
+ EOF
479
+ rm $worktree2_refdir_prefix/branch-symbolic-good &&
480
+ test_cmp expect err &&
481
+
482
+ ln -sf ../../worktrees/worktree-2/good-branch $main_worktree_refdir_prefix/branch-symbolic-good &&
483
+ git refs verify 2>err &&
484
+ cat >expect <<-EOF &&
485
+ warning: refs/heads/branch-symbolic-good: symlinkRef: use deprecated symbolic link for symref
486
+ EOF
487
+ rm $main_worktree_refdir_prefix/branch-symbolic-good &&
488
+ test_cmp expect err &&
489
+
490
+ ln -sf ../../../../logs/branch-escape $worktree1_refdir_prefix/branch-symbolic &&
491
+ git refs verify 2>err &&
492
+ cat >expect <<-EOF &&
493
+ warning: worktrees/worktree-1/refs/worktree/branch-symbolic: symlinkRef: use deprecated symbolic link for symref
494
+ warning: worktrees/worktree-1/refs/worktree/branch-symbolic: symrefTargetIsNotARef: points to non-ref target '\''logs/branch-escape'\''
495
+ EOF
496
+ rm $worktree1_refdir_prefix/branch-symbolic &&
497
+ test_cmp expect err &&
498
+
499
+ for bad_referent_name in ".tag" "branch "
500
+ do
501
+ ln -sf ./"$bad_referent_name" $worktree1_refdir_prefix/bad-symbolic &&
502
+ test_must_fail git refs verify 2>err &&
503
+ cat >expect <<-EOF &&
504
+ warning: worktrees/worktree-1/refs/worktree/bad-symbolic: symlinkRef: use deprecated symbolic link for symref
505
+ error: worktrees/worktree-1/refs/worktree/bad-symbolic: badReferentName: points to invalid refname '\''worktrees/worktree-1/refs/worktree/$bad_referent_name'\''
506
+ EOF
507
+ rm $worktree1_refdir_prefix/bad-symbolic &&
508
+ test_cmp expect err &&
509
+
510
+ ln -sf ../../../../refs/heads/"$bad_referent_name" $worktree1_refdir_prefix/bad-symbolic &&
511
+ test_must_fail git refs verify 2>err &&
512
+ cat >expect <<-EOF &&
513
+ warning: worktrees/worktree-1/refs/worktree/bad-symbolic: symlinkRef: use deprecated symbolic link for symref
514
+ error: worktrees/worktree-1/refs/worktree/bad-symbolic: badReferentName: points to invalid refname '\''refs/heads/$bad_referent_name'\''
515
+ EOF
516
+ rm $worktree1_refdir_prefix/bad-symbolic &&
517
+ test_cmp expect err &&
518
+
519
+ ln -sf ./"$bad_referent_name" $worktree2_refdir_prefix/bad-symbolic &&
520
+ test_must_fail git refs verify 2>err &&
521
+ cat >expect <<-EOF &&
522
+ warning: worktrees/worktree-2/refs/worktree/bad-symbolic: symlinkRef: use deprecated symbolic link for symref
523
+ error: worktrees/worktree-2/refs/worktree/bad-symbolic: badReferentName: points to invalid refname '\''worktrees/worktree-2/refs/worktree/$bad_referent_name'\''
524
+ EOF
525
+ rm $worktree2_refdir_prefix/bad-symbolic &&
526
+ test_cmp expect err &&
527
+
528
+ ln -sf ../../../../refs/heads/"$bad_referent_name" $worktree2_refdir_prefix/bad-symbolic &&
529
+ test_must_fail git refs verify 2>err &&
530
+ cat >expect <<-EOF &&
531
+ warning: worktrees/worktree-2/refs/worktree/bad-symbolic: symlinkRef: use deprecated symbolic link for symref
532
+ error: worktrees/worktree-2/refs/worktree/bad-symbolic: badReferentName: points to invalid refname '\''refs/heads/$bad_referent_name'\''
533
+ EOF
534
+ rm $worktree2_refdir_prefix/bad-symbolic &&
535
+ test_cmp expect err || return 1
536
+ done
537
+'
538
+
539
test_expect_success 'ref content checks should work with worktrees' '
540
test_when_finished "rm -rf repo" &&
541
git init repo &&