mirror of
https://github.com/git-for-windows/git.git
synced 2026-06-14 15:01:15 -05:00
builtin/init: stop modifying global git_work_tree_cfg variable
When executing git-init(1) we need to figure out the final location of the worktree. This location can be configured in a couple of ways: via an environment variable, via the preexisting "core.worktree" config in case we're reinitializing, or implicitly when reinitializing a non-bare repository. When checking for the worktree location in "builtin/init-db.c" we populate any potentially-discovered value both by setting the global `git_work_tree_cfg` variable and via `set_git_work_tree()`, which ultimately ends up modifying `struct repository::worktree`. Modifying `git_work_tree_cfg` is unnecessary though: we configure the worktree in `create_default_files()`, and that function derives the worktree location via `repo_get_work_tree()`. Consequently, propagating the worktree via `set_git_work_tree()` is sufficient. Stop munging `git_work_tree_cfg` and make it file-local to "setup.c" and function-local to `cmd_init_db()`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
36bafa0b65
commit
9bef2cf331
@@ -229,6 +229,8 @@ 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);
|
||||
@@ -243,6 +245,8 @@ int cmd_init_db(int argc,
|
||||
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)
|
||||
|
||||
@@ -100,9 +100,6 @@ int auto_comment_line_char;
|
||||
bool warn_on_auto_comment_char;
|
||||
#endif /* !WITH_BREAKING_CHANGES */
|
||||
|
||||
/* This is set by setup_git_directory_gently() and/or git_default_config() */
|
||||
char *git_work_tree_cfg;
|
||||
|
||||
/*
|
||||
* Repository-local GIT_* environment variables; see environment.h for details.
|
||||
*/
|
||||
|
||||
@@ -149,7 +149,6 @@ int have_git_dir(void);
|
||||
|
||||
extern int is_bare_repository_cfg;
|
||||
int is_bare_repository(void);
|
||||
extern char *git_work_tree_cfg;
|
||||
|
||||
/* Environment bits from configuration mechanism */
|
||||
extern int trust_executable_bit;
|
||||
|
||||
3
setup.c
3
setup.c
@@ -31,6 +31,9 @@ enum allowed_bare_repo {
|
||||
ALLOWED_BARE_REPO_ALL,
|
||||
};
|
||||
|
||||
/* This is set by setup_git_directory_gently() and/or git_default_config() */
|
||||
static char *git_work_tree_cfg;
|
||||
|
||||
static struct startup_info the_startup_info;
|
||||
struct startup_info *startup_info = &the_startup_info;
|
||||
const char *tmp_original_cwd;
|
||||
|
||||
Reference in New Issue
Block a user