#!/bin/sh test_description='Test reffiles backend consistency check' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME GIT_TEST_DEFAULT_REF_FORMAT=files export GIT_TEST_DEFAULT_REF_FORMAT TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'ref name should be checked' ' test_when_finished "rm -rf repo" && git init repo && branch_dir_prefix=.git/refs/heads && tag_dir_prefix=.git/refs/tags && cd repo && git commit --allow-empty -m initial && git checkout -b branch-1 && git tag tag-1 && git commit --allow-empty -m second && git checkout -b branch-2 && git tag tag-2 && git tag multi_hierarchy/tag-2 && cp $branch_dir_prefix/branch-1 $branch_dir_prefix/.branch-1 && test_must_fail git refs verify 2>err && cat >expect <<-EOF && error: refs/heads/.branch-1: badRefName: invalid refname format EOF rm $branch_dir_prefix/.branch-1 && test_cmp expect err && cp $branch_dir_prefix/branch-1 $branch_dir_prefix/@ && test_must_fail git refs verify 2>err && cat >expect <<-EOF && error: refs/heads/@: badRefName: invalid refname format EOF rm $branch_dir_prefix/@ && test_cmp expect err && cp $tag_dir_prefix/multi_hierarchy/tag-2 $tag_dir_prefix/multi_hierarchy/@ && test_must_fail git refs verify 2>err && cat >expect <<-EOF && error: refs/tags/multi_hierarchy/@: badRefName: invalid refname format EOF rm $tag_dir_prefix/multi_hierarchy/@ && test_cmp expect err && cp $tag_dir_prefix/tag-1 $tag_dir_prefix/tag-1.lock && git refs verify 2>err && rm $tag_dir_prefix/tag-1.lock && test_must_be_empty err && cp $tag_dir_prefix/tag-1 $tag_dir_prefix/.lock && test_must_fail git refs verify 2>err && cat >expect <<-EOF && error: refs/tags/.lock: badRefName: invalid refname format EOF rm $tag_dir_prefix/.lock && test_cmp expect err ' test_expect_success 'ref name check should be adapted into fsck messages' ' test_when_finished "rm -rf repo" && git init repo && branch_dir_prefix=.git/refs/heads && tag_dir_prefix=.git/refs/tags && cd repo && git commit --allow-empty -m initial && git checkout -b branch-1 && git tag tag-1 && git commit --allow-empty -m second && git checkout -b branch-2 && git tag tag-2 && cp $branch_dir_prefix/branch-1 $branch_dir_prefix/.branch-1 && git -c fsck.badRefName=warn refs verify 2>err && cat >expect <<-EOF && warning: refs/heads/.branch-1: badRefName: invalid refname format EOF rm $branch_dir_prefix/.branch-1 && test_cmp expect err && cp $branch_dir_prefix/branch-1 $branch_dir_prefix/@ && git -c fsck.badRefName=ignore refs verify 2>err && test_must_be_empty err ' test_done