On Mon, Jun 2, 2025, at 15:29, shejialuo wrote: > "git refs verify" doesn't work if there are worktrees created on Git > v2.43.0 or older versions. These versions don't automatically create the > "refs" directory, causing the error: > > error: cannot open directory .git/worktrees/<worktree name>/refs: > No such file or directory Good. > Since 8f4c00de95 (builtin/worktree: create refdb via ref backend, > 2024-01-08), we automatically create the "refs" directory for new > worktrees. And in 7c78d819e6 (ref: support multiple worktrees check for > refs, 2024-11-20), we assume that all linked worktrees have this > directory and would wrongly report an error to the user, thus > introducing compatibility issue. Okay, you don’t mention c1cf918d3ad (builtin/fsck: add `git refs verify` child process, 2025-02-28) in the commit message because of your reply: > > Because we would call "git refs verify" subprocess in "git-fsck(1)" > > in this release cycle, I just want to fix this problem before the > > release. Thus, it won't affect the users. https://lore.kernel.org/git/a2a50127-6ab9-4d8a-abcc-b1a741df293e@xxxxxxxxxxxxxxxx/T/#m01231abb77735b0f480743e0d2adecc172e1f170 Which I just mention here for completeness and my own memory. ;) All good. > Check for ENOENT errno before reporting directory access errors for > linked worktrees to maintain backward compatibility. > > Reported-by: Kristoffer Haugsbakk <code@xxxxxxxxxxxxxxx> > Signed-off-by: shejialuo <shejialuo@xxxxxxxxx> > [snip] > +test_expect_success 'no refs directory of worktree should not cause problems' ' > + test_when_finished "rm -rf repo" && > + git init repo && > + ( > + cd repo && > + test_commit initial && > + git worktree add --detach ./worktree && > + > + cd worktree && Now in this version you change-directory into `worktree`. You would need a new subshell for that (test style). But I don’t see the need to chdir in the first place? > + worktree_refdir="$(git rev-parse --git-dir)/refs" && > + # Simulate old directory layout > + rmdir "$worktree_refdir" && > + git refs verify 2>err && > + test_must_be_empty err > + ) > +' > + > test_expect_success 'ref name check should work for multiple worktrees' ' > test_when_finished "rm -rf repo" && > git init repo && > -- > 2.49.0 The test passes for me. Also when applying only the test (and not the fix) the test fails as expected. Good.