From: Junio C Hamano <gitster@pobox.com>
To: "Olga Pilipenco via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, "Patrick Steinhardt" <ps@pks.im>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
"René Scharfe" <l.s.r@web.de>,
"Olga Pilipenco" <olga.pilipenco@shopify.com>
Subject: Re: [PATCH v3] worktree: detect from secondary worktree if main worktree is bare
Date: Fri, 31 Jan 2025 11:19:34 -0800 [thread overview]
Message-ID: <xmqqcyg294ft.fsf@gitster.g> (raw)
In-Reply-To: <pull.1829.v3.git.1738346881907.gitgitgadget@gmail.com> (Olga Pilipenco via GitGitGadget's message of "Fri, 31 Jan 2025 18:08:01 +0000")
"Olga Pilipenco via GitGitGadget" <gitgitgadget@gmail.com> writes:
> +/*
> +* When in a secondary worktree, and when extensions.worktreeConfig
> +* is true, only $commondir/config and $commondir/worktrees/<id>/
> +* config.worktree are consulted, hence any core.bare=true setting in
> +* $commondir/config.worktree gets overlooked. Thus, check it manually
> +* to determine if the repository is bare.
> +*/
> +static int is_main_worktree_bare(struct repository *repo)
> +{
> + int bare = 0;
> + struct config_set cs = {0};
> + char *worktree_config = xstrfmt("%s/config.worktree", repo_get_common_dir(repo));
> +
> + git_configset_init(&cs);
> + git_configset_add_file(&cs, worktree_config);
> + git_configset_get_bool(&cs, "core.bare", &bare);
> +
> + git_configset_clear(&cs);
> + free(worktree_config);
> + return bare;
> +}
That is nicely described.
> /**
> * get the main worktree
> */
> @@ -79,16 +101,11 @@ static struct worktree *get_main_worktree(int skip_reading_head)
> CALLOC_ARRAY(worktree, 1);
> worktree->repo = the_repository;
> worktree->path = strbuf_detach(&worktree_path, NULL);
> - /*
> - * NEEDSWORK: If this function is called from a secondary worktree and
> - * config.worktree is present, is_bare_repository_cfg will reflect the
> - * contents of config.worktree, not the contents of the main worktree.
> - * This means that worktree->is_bare may be set to 0 even if the main
> - * worktree is configured to be bare.
> - */
> - worktree->is_bare = (is_bare_repository_cfg == 1) ||
> - is_bare_repository();
> worktree->is_current = is_current_worktree(worktree);
> + worktree->is_bare = (is_bare_repository_cfg == 1) ||
> + is_bare_repository() ||
> + (!worktree->is_current && is_main_worktree_bare(the_repository));
Is "this worktree does not have is_current bit set" equivalent to
"this worktree is the main one, so is_main_worktree_bare() needs to
be consulted"? That linkage between "the is_current bit unset" and
"is the main worktree" is not obvious to me.
Thanks.
next prev parent reply other threads:[~2025-01-31 19:19 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-15 6:52 [PATCH] worktree: detect from secondary worktree if main worktree is bare Olga Pilipenco via GitGitGadget
2025-01-16 21:35 ` [PATCH v2] " Olga Pilipenco via GitGitGadget
2025-01-19 22:30 ` Eric Sunshine
2025-01-28 21:44 ` Olga Pilipenco
2025-01-29 13:41 ` Eric Sunshine
2025-01-29 17:08 ` Junio C Hamano
[not found] ` <F15C12AB-2238-4553-AFA5-18277B18CE5A@shopify.com>
2025-01-30 14:32 ` Eric Sunshine
2025-01-30 14:44 ` Eric Sunshine
2025-01-31 7:05 ` Olga Pilipenco
2025-01-31 13:28 ` Eric Sunshine
2025-01-31 18:08 ` [PATCH v3] " Olga Pilipenco via GitGitGadget
2025-01-31 19:19 ` Junio C Hamano [this message]
2025-01-31 19:26 ` Junio C Hamano
2025-01-31 20:11 ` Olga Pilipenco
2025-01-31 20:20 ` Junio C Hamano
2025-02-04 19:03 ` Olga Pilipenco
2025-02-04 19:43 ` Junio C Hamano
2025-02-04 20:33 ` Olga Pilipenco
2025-02-05 6:30 ` [PATCH v4] " Olga Pilipenco via GitGitGadget
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=xmqqcyg294ft.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=l.s.r@web.de \
--cc=olga.pilipenco@shopify.com \
--cc=ps@pks.im \
--cc=sunshine@sunshineco.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.