On Tue, Nov 05, 2024 at 08:11:42AM +0100, Patrick Steinhardt wrote: [snip] > > diff --git a/refs/files-backend.c b/refs/files-backend.c > > index 03d2503276..f246c92684 100644 > > --- a/refs/files-backend.c > > +++ b/refs/files-backend.c > > @@ -3519,10 +3519,10 @@ static int files_fsck_refs_name(struct ref_store *ref_store UNUSED, > > if (iter->basename[0] != '.' && ends_with(iter->basename, ".lock")) > > goto cleanup; > > > > - if (check_refname_format(iter->basename, REFNAME_ALLOW_ONELEVEL)) { > > + strbuf_addf(&sb, "%s/%s", refs_check_dir, iter->relative_path); > > + if (check_refname_format(sb.buf, 0)) { > > struct fsck_ref_report report = { 0 }; > > > > - strbuf_addf(&sb, "%s/%s", refs_check_dir, iter->relative_path); > > report.path = sb.buf; > > ret = fsck_report_ref(o, &report, > > FSCK_MSG_BAD_REF_NAME, > > So this only works right now because we never check root refs in the > first place? Maybe that is worth a comment. > Yes, I agree. I will improve this in the next version. > > diff --git a/t/t0602-reffiles-fsck.sh b/t/t0602-reffiles-fsck.sh > > index 71a4d1a5ae..0aee377439 100755 > > --- a/t/t0602-reffiles-fsck.sh > > +++ b/t/t0602-reffiles-fsck.sh > > @@ -25,6 +25,13 @@ test_expect_success 'ref name should be checked' ' > > git tag tag-2 && > > git tag multi_hierarchy/tag-2 && > > > > + cp $branch_dir_prefix/branch-1 $branch_dir_prefix/@ && > > + git refs verify 2>err && > > + cat >expect <<-EOF && > > + EOF > > + test_must_be_empty err && > > + rm $branch_dir_prefix/@ && > > `expect` isn't used here as you use `test_must_be_empty`. > Thanks, I will improve this in the next version. > > cp $branch_dir_prefix/branch-1 $branch_dir_prefix/.branch-1 && > > test_must_fail git refs verify 2>err && > > cat >expect <<-EOF && > > @@ -33,20 +40,20 @@ test_expect_success 'ref name should be checked' ' > > rm $branch_dir_prefix/.branch-1 && > > test_cmp expect err && > > > > - cp $branch_dir_prefix/branch-1 $branch_dir_prefix/@ && > > + 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/@: badRefName: invalid refname format > > + error: refs/heads/ branch-1: badRefName: invalid refname format > > EOF > > - rm $branch_dir_prefix/@ && > > + rm $branch_dir_prefix/'\'' branch-1'\'' && > > test_cmp expect err && > > Okay, we now allow `refs/heads/@`, but still don't allow other bad > formatting like spaces in the refname. > Yes, this is a mistake. Junio have told me in this patch and I have realized this. https://lore.kernel.org/git/xmqqjzei1mtb.fsf@gitster.g/ > Patrick Thanks, Jialuo