Re: [PATCH v2 1/1] fsck: ignore missing "refs" directory for linked worktrees

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux