Re: [PATCH v3] worktree: detect from secondary worktree if main worktree is bare
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 31, 2025, 19:19 UTC
- Message-ID
- <xmqqcyg294ft.fsf@gitster.g>
- In-Reply-To
- <pull.1829.v3.git.1738346881907.gitgitgadget@gmail.com>
"Olga Pilipenco via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 21 quoted lines
> +/*
> +* 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.
Show 20 quoted lines
> /** > * 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.