if (!git_work_tree_cfg)
git_work_tree_cfg = xgetcwd();
if (work_tree)
- set_git_work_tree(work_tree);
+ set_git_work_tree(the_repository, work_tree);
else
- set_git_work_tree(git_work_tree_cfg);
+ set_git_work_tree(the_repository, git_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));
if (real_git_dir)
die(_("--separate-git-dir incompatible with bare repository"));
if (work_tree)
- set_git_work_tree(work_tree);
+ set_git_work_tree(the_repository, work_tree);
}
flags |= INIT_DB_EXIST_OK;
/* #3, #7, #11, #15, #19, #23, #27, #31 (see t1510) */
if (work_tree_env)
- set_git_work_tree(work_tree_env);
+ set_git_work_tree(repo, work_tree_env);
else if (is_bare_repository_cfg > 0) {
if (git_work_tree_cfg) {
/* #22.2, #30 */
}
else if (git_work_tree_cfg) { /* #6, #14 */
if (is_absolute_path(git_work_tree_cfg))
- set_git_work_tree(git_work_tree_cfg);
+ set_git_work_tree(repo, git_work_tree_cfg);
else {
char *core_worktree;
if (chdir(gitdirenv))
core_worktree = xgetcwd();
if (chdir(cwd->buf))
die_errno(_("cannot come back to cwd"));
- set_git_work_tree(core_worktree);
+ set_git_work_tree(repo, core_worktree);
free(core_worktree);
}
}
return NULL;
}
else /* #2, #10 */
- set_git_work_tree(".");
+ set_git_work_tree(repo, ".");
/* set_git_work_tree() must have been called by now */
worktree = repo_get_work_tree(repo);
}
/* #0, #1, #5, #8, #9, #12, #13 */
- set_git_work_tree(".");
+ set_git_work_tree(repo, ".");
if (strcmp(gitdir, DEFAULT_GIT_DIR_ENVIRONMENT))
set_git_dir(repo, gitdir, 0);
if (offset >= cwd->len)
return NULL;
}
-static int git_work_tree_initialized;
-
/*
* Note. This works only before you used a work tree. This was added
* primarily to support git-clone to work in a new repository it just
* created, and is not meant to flip between different work trees.
*/
-void set_git_work_tree(const char *new_work_tree)
+void set_git_work_tree(struct repository *repo, const char *new_work_tree)
{
- if (git_work_tree_initialized) {
+ if (repo->worktree_initialized) {
struct strbuf realpath = STRBUF_INIT;
strbuf_realpath(&realpath, new_work_tree, 1);
new_work_tree = realpath.buf;
- if (strcmp(new_work_tree, the_repository->worktree))
+ if (strcmp(new_work_tree, repo->worktree))
die("internal error: work tree has already been set\n"
"Current worktree: %s\nNew worktree: %s",
- the_repository->worktree, new_work_tree);
+ repo->worktree, new_work_tree);
strbuf_release(&realpath);
return;
}
- git_work_tree_initialized = 1;
- repo_set_worktree(the_repository, new_work_tree);
+ repo->worktree_initialized = true;
+ repo_set_worktree(repo, new_work_tree);
}
const char *setup_git_directory_gently(int *nongit_ok)