public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Patrick Steinhardt <ps@pks.im>,
	Phillip Wood <phillip.wood@dunelm.org.uk>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v2 1/3] worktree: remove "the_repository" from is_current_worktree()
Date: Tue, 17 Mar 2026 10:24:36 +0000	[thread overview]
Message-ID: <9c915043-02da-4823-b4e7-d2a340c0373d@gmail.com> (raw)
In-Reply-To: <9e3b59d1-58f3-476c-9c7a-3ceffbb71810@gmail.com>

On 16/03/2026 16:22, Phillip Wood wrote:
> 
>> I have been staring at this code for longer than I want to admit, and I
>> still haven't convinced myself that this is not a change in behaviour.
>> I think what I'm wondering about is what `is_current_worktree()` is
>> actually intended to do. In other words, what _do_ we consider to be
>> "current"?
> 
> There was some discussion about that in [1] where reviewers were 
> surprised that we needed to call is_current_worktree() here. This change 
> is consistent with the rest of the patch but you're right that it is a 
> change in behavior as at the moment the "current" worktree is set by the 
> worktree that the process was started in. In practice we only ever have 
> a single struct repository instance per process so there is no practical 
> change in behavior here. At the moment, if you visit a set of submodules 
> from the superproject by forking one process per submodule each 
> submodule worktree is considered "current", but if you visit them by 
> spinning up some threads in the current process they are not considered 
> "current". That seems to me to be inconsistent as the process started by 
> the user is in the superproject in both cases.

To add another example get_worktree_ref_store() checks `wt->is_current` 
to see if it should use the ref store in `wt->repo` or create a new 
store. That means that if we use `the_repository` to define the current 
worktree we'll end up opening a copy of the ref store in `wt->repo` when 
`repo != the_repository` and `wt->path` matches `wt->repo->worktree` 
when we could be using the ref store that's already open. It is a bit 
like the bug fixed by 1339cb3c47a (worktree: don't store main worktree 
twice, 2024-06-06) but for multiple repositories.

I'll re-roll with a bit more description in the commit message but I'm 
going to be off the list for most of the rest of this week so it will 
probably be next week before I post a new version.

Thanks

Phillip

> The "is_current" field was added in [1] without any discussion in the 
> commit message. It seems to have been added to stop the same branch 
> being checked out in multiple worktrees [2].
> 
> Thanks
> 
> Phillip
> 
> [1] 750e8a60d69 (worktree.c: mark current worktree, 2016-04-22)
> [2] https://lore.kernel.org/git/ 
> CAJZYdzhG8h3s=Ep1fuGbam1cWhYkv0tW6tQ7pBGGj+fj6=Nrsw@mail.gmail.com/
> 
> 
>> I would consider the worktree "current" that the Git process
>> has been invoked in. So if I pass a repo other than `the_repository`, or
>> if I pass a worktree that is not the one that Git has been started in,
>> then I would expect the function to return `false`. With that naive
>> assumption your change would be breaking the existing logic.
>>
>> But I have no idea whether my assumption is correct or not, as
>> there is not really any documentation of what the function or of the
>> `struct worktree::is_current` field. And having a look at a couple of
>> callers doesn't really make me all the wiser.
>>
>> It would be great if you could shine some light on this and then also
>> add a bit of documentation to either the function, the field, or both :)
>>
>> Thanks!
>>
>> Patrick
>>
> 


  reply	other threads:[~2026-03-17 10:24 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-13 14:19 [PATCH 0/3] worktree: stop using "the_repository" in is_current_worktree() Phillip Wood
2026-03-13 14:19 ` [PATCH 1/3] worktree: remove "the_repository" from is_current_worktree() Phillip Wood
2026-03-13 14:19 ` [PATCH 2/3] worktree add: stop reading ".git/HEAD" Phillip Wood
2026-03-13 21:41   ` Junio C Hamano
2026-03-13 14:19 ` [PATCH 3/3] worktree: reject NULL worktree in get_worktree_git_dir() Phillip Wood
2026-03-13 21:42   ` Junio C Hamano
2026-03-14 20:09     ` Phillip Wood
2026-03-15 16:18 ` [PATCH v2 0/3] worktree: stop using "the_repository" in is_current_worktree() Phillip Wood
2026-03-15 16:18   ` [PATCH v2 1/3] worktree: remove "the_repository" from is_current_worktree() Phillip Wood
2026-03-16  7:38     ` Patrick Steinhardt
2026-03-16 16:22       ` Phillip Wood
2026-03-17 10:24         ` Phillip Wood [this message]
2026-03-23  9:41           ` Shreyansh Paliwal
2026-03-23 14:37             ` Phillip Wood
2026-03-23 17:05               ` Shreyansh Paliwal
2026-03-15 16:18   ` [PATCH v2 2/3] worktree add: stop reading ".git/HEAD" Phillip Wood
2026-03-16  7:39     ` Patrick Steinhardt
2026-03-15 16:18   ` [PATCH v2 3/3] worktree: reject NULL worktree in get_worktree_git_dir() Phillip Wood
2026-03-15 21:17   ` [PATCH v2 0/3] worktree: stop using "the_repository" in is_current_worktree() Junio C Hamano
2026-03-26 14:16 ` [PATCH v3 " Phillip Wood
2026-03-26 14:16   ` [PATCH v3 1/3] worktree: remove "the_repository" from is_current_worktree() Phillip Wood
2026-03-26 15:48     ` Junio C Hamano
2026-03-27 16:40       ` Phillip Wood
2026-03-27 17:07         ` Junio C Hamano
2026-03-26 14:16   ` [PATCH v3 2/3] worktree add: stop reading ".git/HEAD" Phillip Wood
2026-03-26 14:16   ` [PATCH v3 3/3] worktree: reject NULL worktree in get_worktree_git_dir() Phillip Wood

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9c915043-02da-4823-b4e7-d2a340c0373d@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox