diff options
author | Jeff King <peff@peff.net> | 2016-10-20 02:24:31 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-10-26 13:30:51 -0700 |
commit | b1ef400eece473f83f39980c54f67e3e7d202538 (patch) | |
tree | 2a513b9782b489001075ea6a45fae22e798bcc82 /environment.c | |
parent | 4f03666ac69ec4799998f010d04916c12e38edf8 (diff) | |
download | git-b1ef400eece473f83f39980c54f67e3e7d202538.tar.gz |
setup_git_env: avoid blind fall-back to ".git"jk/no-looking-at-dotgit-outside-repo-final
When we default to ".git" without having done any kind of
repository setup, the results quite often do what the user
expects. But this has also historically been the cause of
some poorly behaved corner cases. These cases can be hard to
find, because they happen at the conjunction of two
relatively rare circumstances:
1. We are running some code which assumes there's a
repository present, but there isn't necessarily one
(e.g., low-level diff code triggered by "git diff
--no-index" might try to look at some repository data).
2. We have an unusual setup, like being in a subdirectory
of the working tree, or we have a .git file (rather
than a directory), or we are running a tool like "init"
or "clone" which may operate on a repository in a
different directory.
Our test scripts often cover (1), but miss doing (2) at the
same time, and so the fallback appears to work but has
lurking bugs. We can flush these bugs out by refusing to do
the fallback entirely., This makes potential problems a lot
more obvious by complaining even for "usual" setups.
This passes the test suite (after the adjustments in the
previous patches), but there's a risk of regression for any
cases where the fallback usually works fine but the code
isn't exercised by the test suite. So by itself, this
commit is a potential step backward, but lets us take two
steps forward once we've identified and fixed any such
instances.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'environment.c')
-rw-r--r-- | environment.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/environment.c b/environment.c index cdc097f80c..6a8e0c2d1b 100644 --- a/environment.c +++ b/environment.c @@ -167,8 +167,11 @@ static void setup_git_env(void) const char *replace_ref_base; git_dir = getenv(GIT_DIR_ENVIRONMENT); - if (!git_dir) + if (!git_dir) { + if (!startup_info->have_repository) + die("BUG: setup_git_env called without repository"); git_dir = DEFAULT_GIT_DIR_ENVIRONMENT; + } gitfile = read_gitfile(git_dir); git_dir = xstrdup(gitfile ? gitfile : git_dir); if (get_common_dir(&sb, git_dir)) |