builtin/init: simplify logic to configure worktree

In the preceding commit we have stopped modifying the global `git_work_tree_cfg` variable. With this change there's now some code paths where we end up setting the local `git_work_tree_cfg` variable, but without actually using the value for anything. Refactor the code a bit so that we only set the worktree configuration in case it's actually needed. Furthermore, reflow it a bit to make the code easier to follow. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jun 11, 2026 at 08:44 UTC 65eb5b989aa6d7f764d097c6759f6b6189eb0d27
1 file changed +18 -13
builtin/init-db.c
+18 -13
index 01bc27904e..b4343c2804 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -229,24 +229,29 @@ int cmd_init_db(int argc, if (!is_bare_repository_cfg) { const char *git_dir_parent = strrchr(git_dir, '/'); - char *git_work_tree_cfg = NULL; - if (git_dir_parent) { - char *rel = xstrndup(git_dir, git_dir_parent - git_dir); - git_work_tree_cfg = real_pathdup(rel, 1); - free(rel); - } - if (!git_work_tree_cfg) - git_work_tree_cfg = xgetcwd(); - if (work_tree) + if (work_tree) { set_git_work_tree(the_repository, work_tree); - else - set_git_work_tree(the_repository, git_work_tree_cfg); + } else { + char *work_tree_cfg = NULL; + + if (git_dir_parent) { + char *rel = xstrndup(git_dir, git_dir_parent - git_dir); + work_tree_cfg = real_pathdup(rel, 1); + free(rel); + } + + if (!work_tree_cfg) + work_tree_cfg = xgetcwd(); + + set_git_work_tree(the_repository, work_tree_cfg); + + free(work_tree_cfg); + } + if (access(repo_get_work_tree(the_repository), X_OK)) die_errno (_("Cannot access work tree '%s'"), repo_get_work_tree(the_repository)); - - free(git_work_tree_cfg); } else { if (real_git_dir)