From: Justin Tobler <jltobler@gmail.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 5/7] environment: split up concerns of `is_bare_repository_cfg`
Date: Thu, 11 Jun 2026 10:33:04 -0500 [thread overview]
Message-ID: <airTpB8Pm6TYoMhx@denethor> (raw)
In-Reply-To: <aip9irJ7WBaICxDa@pks.im>
On 26/06/11 11:19AM, Patrick Steinhardt wrote:
> On Wed, Jun 10, 2026 at 05:22:04PM -0500, Justin Tobler wrote:
> > On 26/06/10 08:56AM, Patrick Steinhardt wrote:
> > > diff --git a/builtin/init-db.c b/builtin/init-db.c
> > > index 52aa92fb0a..566732c9f4 100644
> > > --- a/builtin/init-db.c
> > > +++ b/builtin/init-db.c
> > > @@ -81,7 +81,7 @@ int cmd_init_db(int argc,
> > > const char *template_dir = NULL;
> > > char *template_dir_to_free = NULL;
> > > unsigned int flags = 0;
> > > - int bare = is_bare_repository_cfg;
> > > + int bare = startup_info->force_bare_repository ? 1 : -1;
> >
> > Any particular reason to continue mapping `force_bare_repository=false`
> > to -1? Or was this to just minimize changes?
>
> The `-1` value doesn't mean "false", but it rather means "undecided".
> The effect of this is that "core.bare" will eventually override this.
Ok, so `bare` here is still ultimately a combination of
`force_bare_repository` and `bare_cfg`.
> > > diff --git a/setup.c b/setup.c
> > > index 71fc6b33da..2b690da8ca 100644
> > > --- a/setup.c
> > > +++ b/setup.c
> > > @@ -795,10 +795,16 @@ static int check_repository_format_gently(const char *gitdir,
> > > has_common = 0;
> > > }
> > >
> > > - if (!has_common) {
> > > - if (candidate->is_bare != -1)
> > > - is_bare_repository_cfg = candidate->is_bare;
> > > - } else {
> > > + if (startup_info->force_bare_repository) {
> > > + candidate->is_bare = 1;
> > > + FREE_AND_NULL(candidate->work_tree);
> > > + } else if (has_common) {
> > > + /*
> > > + * When sharing a common dir with another repository (e.g. a
> > > + * linked worktree), do not let this repository's config
> > > + * dictate bareness; it is inherited from the main worktree.
> > > + */
> > > + candidate->is_bare = -1;
> > > FREE_AND_NULL(candidate->work_tree);
> >
> > Previously, when there was a common dir, `candidate->work_tree` was left
> > untouched, but now we are expclicitly setting it. I'm not sure I fully
> > understand this change.
>
> I cannot blame you. All of this logic is so unbelievably tangled and
> hard to follow.
>
> In any case, I think you might have missed the fact that we `else if`
> branch is now `has_common` as compared to `!has_common`? To explain the
> different cases a bit:
>
> - When we have `force_bare_repository` we are being told that the
> repository should be treated as bare. So we set `is_bare` and also
> clear the work tree that may have been discovered.
>
> - When we have a commondir we know that we're in a worktree.
> Previously we did nothing in this case, and that had the implicit
> effect that `is_bare_repository_cfg` would remain at `-1`. So to
> match that behaviour we have to also reset the candidate's bareness
> to `-1`, so that we parse it via the repository's configuration at a
> later point in time.
>
> The other part here is that we also reset `candidate->work_tree`.
> This is because the expectation is that `$GIT_DIR/common` should
> override any "core.worktree" settings. Quoting git-config(1):
>
> If GIT_COMMON_DIR environment variable is set, core.worktree is
> ignored and not used for determining the root of working tree.
>
> - When we don't have a commondir we previosuly had to also adapt the
> global `is_bare_repository_cfg` variable. This part is not necessary
> anymore, so we basically just drop this case altogether.
Thanks for explaination. This make more sense now.
-Justin
next prev parent reply other threads:[~2026-06-11 15:33 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-10 6:56 [PATCH 0/7] setup: drop global state Patrick Steinhardt
2026-06-10 6:56 ` [PATCH 1/7] builtin/init: stop modifying global `git_work_tree_cfg` variable Patrick Steinhardt
2026-06-10 21:15 ` Justin Tobler
2026-06-10 6:56 ` [PATCH 2/7] builtin/init: simplify logic to configure worktree Patrick Steinhardt
2026-06-10 21:29 ` Justin Tobler
2026-06-10 6:56 ` [PATCH 3/7] setup: remove global `git_work_tree_cfg` variable Patrick Steinhardt
2026-06-10 21:52 ` Justin Tobler
2026-06-11 6:36 ` Patrick Steinhardt
2026-06-10 6:56 ` [PATCH 4/7] builtin/init: stop modifying `is_bare_repository_cfg` Patrick Steinhardt
2026-06-10 6:56 ` [PATCH 5/7] environment: split up concerns of `is_bare_repository_cfg` Patrick Steinhardt
2026-06-10 22:22 ` Justin Tobler
2026-06-11 9:19 ` Patrick Steinhardt
2026-06-11 15:33 ` Justin Tobler [this message]
2026-06-10 6:56 ` [PATCH 6/7] environment: stop using `the_repository` in `is_bare_repository()` Patrick Steinhardt
2026-06-10 6:56 ` [PATCH 7/7] treewide: drop USE_THE_REPOSITORY_VARIABLE Patrick Steinhardt
2026-06-10 22:26 ` Justin Tobler
2026-06-11 6:44 ` [PATCH v2 0/7] setup: drop global state Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 1/7] builtin/init: stop modifying global `git_work_tree_cfg` variable Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 2/7] builtin/init: simplify logic to configure worktree Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 3/7] setup: remove global `git_work_tree_cfg` variable Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 4/7] builtin/init: stop modifying `is_bare_repository_cfg` Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 5/7] environment: split up concerns of `is_bare_repository_cfg` Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 6/7] environment: stop using `the_repository` in `is_bare_repository()` Patrick Steinhardt
2026-06-11 6:44 ` [PATCH v2 7/7] treewide: drop USE_THE_REPOSITORY_VARIABLE Patrick Steinhardt
2026-06-11 15:47 ` [PATCH v2 0/7] setup: drop global state Justin Tobler
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=airTpB8Pm6TYoMhx@denethor \
--to=jltobler@gmail.com \
--cc=git@vger.kernel.org \
--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