From 73f192c991016bf88a9416cdf0e949f8b946f7e2 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Tue, 20 Jun 2017 12:19:32 -0700 Subject: setup: don't perform lazy initialization of repository state Under some circumstances (bogus GIT_DIR value or the discovered gitdir is '.git') 'setup_git_directory()' won't initialize key repository state. This leads to inconsistent state after running the setup code. To account for this inconsistent state, lazy initialization is done once a caller asks for the repository's gitdir or some other piece of repository state. This is confusing and can be error prone. Instead let's tighten the expected outcome of 'setup_git_directory()' and ensure that it initializes repository state in all cases that would have been handled by lazy initialization. This also lets us drop the requirement to have 'have_git_dir()' check if the environment variable GIT_DIR was set as that will be handled by the end of the setup code. Signed-off-by: Brandon Williams Signed-off-by: Junio C Hamano --- setup.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'setup.c') diff --git a/setup.c b/setup.c index 358fbc2e53..24a738b0d6 100644 --- a/setup.c +++ b/setup.c @@ -1091,6 +1091,20 @@ const char *setup_git_directory_gently(int *nongit_ok) startup_info->have_repository = !nongit_ok || !*nongit_ok; startup_info->prefix = prefix; + /* + * Not all paths through the setup code will call 'set_git_dir()' (which + * directly sets up the environment) so in order to guarantee that the + * environment is in a consistent state after setup, explicitly setup + * the environment if we have a repository. + * + * NEEDSWORK: currently we allow bogus GIT_DIR values to be set in some + * code paths so we also need to explicitly setup the environment if + * the user has set GIT_DIR. It may be beneficial to disallow bogus + * GIT_DIR values at some point in the future. + */ + if (startup_info->have_repository || getenv(GIT_DIR_ENVIRONMENT)) + setup_git_env(); + strbuf_release(&dir); strbuf_release(&gitdir); -- cgit v1.3-5-g9baa