diff options
author | Brandon Williams <bmwill@google.com> | 2017-06-20 21:19:32 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-06-24 03:24:34 +0200 |
commit | 73f192c991016bf88a9416cdf0e949f8b946f7e2 (patch) | |
tree | f86acaeb5a732acfd642a9b60ca5e76d2728c292 /setup.c | |
parent | Merge branches 'bw/ls-files-sans-the-index' and 'bw/config-h' into bw/repo-ob... (diff) | |
download | git-73f192c991016bf88a9416cdf0e949f8b946f7e2.tar.xz git-73f192c991016bf88a9416cdf0e949f8b946f7e2.zip |
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 <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'setup.c')
-rw-r--r-- | setup.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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); |