summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2010-07-24 06:26:41 -0500
committerJunio C Hamano <gitster@pobox.com>2010-07-25 22:12:50 -0700
commitf161edebb64f08bfc615fd9c28ebae3333255e2e (patch)
treef19dd8252a817de7c43d9120f9226167c737371c /setup.c
parent68698da540acb0c891b810396d704fef3643c576 (diff)
downloadgit-f161edebb64f08bfc615fd9c28ebae3333255e2e.tar.gz
setup: split off a function to handle hitting ceiling in repo search
Perhaps some day, other similar conditions (hitting the mount point, hitting the root of the file system) will share this code. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/setup.c b/setup.c
index ec11c46266..9fc05e2c0a 100644
--- a/setup.c
+++ b/setup.c
@@ -378,6 +378,16 @@ static const char *setup_bare_git_dir(const char *work_tree_env,
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;
+}
+
/*
* We cannot decide in this function whether we are in the work tree or
* not, since the config can only be read _after_ this function was called.
@@ -443,15 +453,8 @@ const char *setup_git_directory_gently(int *nongit_ok)
return setup_bare_git_dir(work_tree_env, offset,
len, cwd, nongit_ok);
while (--offset > ceil_offset && cwd[offset] != '/');
- if (offset <= ceil_offset) {
- if (nongit_ok) {
- if (chdir(cwd))
- die_errno("Cannot come back to cwd");
- *nongit_ok = 1;
- return NULL;
- }
- die("Not a git repository (or any of the parent directories): %s", DEFAULT_GIT_DIR_ENVIRONMENT);
- }
+ if (offset <= ceil_offset)
+ return setup_nongit(cwd, nongit_ok);
if (one_filesystem) {
if (stat("..", &buf)) {
cwd[offset] = '\0';