Merge branch 'ed/simplify-setup-git-dir'
Code simplification. * ed/simplify-setup-git-dir: Simplify handling of setup_git_directory_gently() failure cases.
This commit is contained in:
commit
e805dc1892
74
setup.c
74
setup.c
@ -831,16 +831,6 @@ static const char *setup_bare_git_dir(struct strbuf *cwd, int offset,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const char *setup_nongit(const char *cwd, int *nongit_ok)
|
||||
{
|
||||
if (!nongit_ok)
|
||||
die(_("not a git repository (or any of the parent directories): %s"), DEFAULT_GIT_DIR_ENVIRONMENT);
|
||||
if (chdir(cwd))
|
||||
die_errno(_("cannot come back to cwd"));
|
||||
*nongit_ok = 1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static dev_t get_device_or_die(const char *path, const char *prefix, int prefix_len)
|
||||
{
|
||||
struct stat buf;
|
||||
@ -1054,7 +1044,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
||||
{
|
||||
static struct strbuf cwd = STRBUF_INIT;
|
||||
struct strbuf dir = STRBUF_INIT, gitdir = STRBUF_INIT;
|
||||
const char *prefix;
|
||||
const char *prefix = NULL;
|
||||
struct repository_format repo_fmt;
|
||||
|
||||
/*
|
||||
@ -1079,9 +1069,6 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
||||
strbuf_addbuf(&dir, &cwd);
|
||||
|
||||
switch (setup_git_directory_gently_1(&dir, &gitdir, 1)) {
|
||||
case GIT_DIR_NONE:
|
||||
prefix = NULL;
|
||||
break;
|
||||
case GIT_DIR_EXPLICIT:
|
||||
prefix = setup_explicit_git_dir(gitdir.buf, &cwd, &repo_fmt, nongit_ok);
|
||||
break;
|
||||
@ -1097,29 +1084,51 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
||||
prefix = setup_bare_git_dir(&cwd, dir.len, &repo_fmt, nongit_ok);
|
||||
break;
|
||||
case GIT_DIR_HIT_CEILING:
|
||||
prefix = setup_nongit(cwd.buf, nongit_ok);
|
||||
if (!nongit_ok)
|
||||
die(_("not a git repository (or any of the parent directories): %s"),
|
||||
DEFAULT_GIT_DIR_ENVIRONMENT);
|
||||
*nongit_ok = 1;
|
||||
break;
|
||||
case GIT_DIR_HIT_MOUNT_POINT:
|
||||
if (nongit_ok) {
|
||||
*nongit_ok = 1;
|
||||
strbuf_release(&cwd);
|
||||
strbuf_release(&dir);
|
||||
return NULL;
|
||||
}
|
||||
die(_("not a git repository (or any parent up to mount point %s)\n"
|
||||
"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."),
|
||||
dir.buf);
|
||||
if (!nongit_ok)
|
||||
die(_("not a git repository (or any parent up to mount point %s)\n"
|
||||
"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."),
|
||||
dir.buf);
|
||||
*nongit_ok = 1;
|
||||
break;
|
||||
case GIT_DIR_NONE:
|
||||
/*
|
||||
* As a safeguard against setup_git_directory_gently_1 returning
|
||||
* this value, fallthrough to BUG. Otherwise it is possible to
|
||||
* set startup_info->have_repository to 1 when we did nothing to
|
||||
* find a repository.
|
||||
*/
|
||||
default:
|
||||
BUG("unhandled setup_git_directory_1() result");
|
||||
}
|
||||
|
||||
if (prefix)
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
|
||||
else
|
||||
/*
|
||||
* At this point, nongit_ok is stable. If it is non-NULL and points
|
||||
* to a non-zero value, then this means that we haven't found a
|
||||
* repository and that the caller expects startup_info to reflect
|
||||
* this.
|
||||
*
|
||||
* Regardless of the state of nongit_ok, startup_info->prefix and
|
||||
* the GIT_PREFIX environment variable must always match. For details
|
||||
* see Documentation/config/alias.txt.
|
||||
*/
|
||||
if (nongit_ok && *nongit_ok) {
|
||||
startup_info->have_repository = 0;
|
||||
startup_info->prefix = NULL;
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
|
||||
|
||||
startup_info->have_repository = !nongit_ok || !*nongit_ok;
|
||||
startup_info->prefix = prefix;
|
||||
} else {
|
||||
startup_info->have_repository = 1;
|
||||
startup_info->prefix = prefix;
|
||||
if (prefix)
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
|
||||
else
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Not all paths through the setup code will call 'set_git_dir()' (which
|
||||
@ -1132,7 +1141,10 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
||||
* 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)) {
|
||||
if (/* GIT_DIR_EXPLICIT, GIT_DIR_DISCOVERED, GIT_DIR_BARE */
|
||||
startup_info->have_repository ||
|
||||
/* GIT_DIR_EXPLICIT */
|
||||
getenv(GIT_DIR_ENVIRONMENT)) {
|
||||
if (!the_repository->gitdir) {
|
||||
const char *gitdir = getenv(GIT_DIR_ENVIRONMENT);
|
||||
if (!gitdir)
|
||||
|
Loading…
Reference in New Issue
Block a user