Re: [PATCH v2 05/13] setup: introduce explicit repository discovery
From: Toon Claes <hidden>
Date: 2026-07-08 09:33:01
Patrick Steinhardt [off-list ref] writes:
quoted hunk ↗ jump to hunk
When setting up the global repository we intermix repository discovery and repository configuration: we repeatedly call `set_git_work_tree()` and `apply_and_export_relative_gitdir()` until we're happy with the result. The result of this is then a partially-configured repository that we use for further setup. This process is quite hard to follow, as it's never quite clear which parts of the repository have been configured already and which haven't. Furthermore, it means that the repository configuration is distributed across many different places instead of having it neatly contained in a single location. Ultimately, this is the reason that we cannot use a central function like `repo_init()`. Refactor the logic so that we stop partially-configuring a repository and instead populate a new `struct repo_discovery`. This allow us to essentially split repository setup into two phases: - The first phase only figures out parameters required to configure the repository. - The second phase then takes these parameters and applies them to the repository. Like this, we'll never end up with a partially-configured repository and can eventually extend `repo_init()` to handle the full initialization for us. Signed-off-by: Patrick Steinhardt <redacted> --- setup.c | 155 ++++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 57 deletions(-)diff --git a/setup.c b/setup.c index 324a235dd1..f713d024f7 100644 --- a/setup.c +++ b/setup.c@@ -1090,14 +1090,47 @@ static void apply_and_export_relative_gitdir(struct repository *repo, const char strbuf_release(&realpath); } -static const char *setup_explicit_git_dir(struct repository *repo, - const char *gitdirenv, - struct strbuf *cwd, - struct repository_format *repo_fmt, - int *nongit_ok) +struct repo_discovery { + char *gitdir; + char *worktree; +};
I like where you're going with this. It's nicer to have a struct that captures what we know and has accurate data, instead of having a `repository` that's only partly initialized. -- Cheers, Toon