mirror of
https://github.com/git/git.git
synced 2026-08-05 07:31:02 +00:00
setup: stop using the_repository in setup_work_tree()
Stop using `the_repository` in `setup_work_tree()` and instead accept
the repository as a parameter. The injection of `the_repository` is thus
bumped one level higher, where callers now pass it in explicitly.
Note that the function tracks two bits of information via global
variables. This of course doesn't make much sense anymore now that we
can set up worktrees for arbitrary repositories:
- We track whether the worktree has already been initialized and, if
so, we skip the call to `chdir_notify()` and setenv(3p). It does not
make much sense to store this info in the repository, as we _would_
want to update the environment when switching between worktrees back
and forth.
So instead of storing this info in the repository, we drop this
state entirely and live with the fact that we may execute the logic
twice. It should ultimately be idempotent though and thus not be
much of a problem.
- We track whether the worktree configuration is bogus. If so, and if
later on some caller tries to setup the worktree, then we'll die
instead. This is indeed information that we can move into the
repository itself.
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
ea1d0f886d
commit
bd2851d84f
15
setup.c
15
setup.c
@@ -26,7 +26,6 @@
|
||||
#include "trace2.h"
|
||||
#include "worktree.h"
|
||||
|
||||
static int work_tree_config_is_bogus;
|
||||
enum allowed_bare_repo {
|
||||
ALLOWED_BARE_REPO_EXPLICIT = 0,
|
||||
ALLOWED_BARE_REPO_ALL,
|
||||
@@ -494,18 +493,14 @@ int is_inside_work_tree(struct repository *repo)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void setup_work_tree(void)
|
||||
void setup_work_tree(struct repository *repo)
|
||||
{
|
||||
const char *work_tree;
|
||||
static int initialized = 0;
|
||||
|
||||
if (initialized)
|
||||
return;
|
||||
|
||||
if (work_tree_config_is_bogus)
|
||||
if (repo->worktree_config_is_bogus)
|
||||
die(_("unable to set up work tree using invalid config"));
|
||||
|
||||
work_tree = repo_get_work_tree(the_repository);
|
||||
work_tree = repo_get_work_tree(repo);
|
||||
if (!work_tree || chdir_notify(work_tree))
|
||||
die(_("this operation must be run in a work tree"));
|
||||
|
||||
@@ -515,8 +510,6 @@ void setup_work_tree(void)
|
||||
*/
|
||||
if (getenv(GIT_WORK_TREE_ENVIRONMENT))
|
||||
setenv(GIT_WORK_TREE_ENVIRONMENT, ".", 1);
|
||||
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
static void setup_original_cwd(struct repository *repo)
|
||||
@@ -1164,7 +1157,7 @@ static const char *setup_explicit_git_dir(struct repository *repo,
|
||||
if (git_work_tree_cfg) {
|
||||
/* #22.2, #30 */
|
||||
warning("core.bare and core.worktree do not make sense");
|
||||
work_tree_config_is_bogus = 1;
|
||||
repo->worktree_config_is_bogus = true;
|
||||
}
|
||||
|
||||
/* #18, #26 */
|
||||
|
||||
Reference in New Issue
Block a user