[PATCH 5/9] setup: split off code to handle stumbling upon a repository
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Jul 24, 2010, 11:25 UTC
- Message-ID
- <20100724112532.GE16054@burratino>
- In-Reply-To
- <20100724111505.GC7150@burratino>
If a repository is found as an ancestor of the original working directory, it is assumed by default to be bare. Handle this case with its own function.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- setup.c | 34 +++++++++++++++++++++------------- 1 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/setup.c b/setup.c index 3d25d0f..ec11c46 100644 --- a/setup.c +++ b/setup.c @@ -360,6 +360,24 @@ static int cwd_contains_git_dir(const char **gitfile_dirp) return is_git_directory(DEFAULT_GIT_DIR_ENVIRONMENT); } +static const char *setup_bare_git_dir(const char *work_tree_env, + int offset, int len, char *cwd, int *nongit_ok) +{ + int root_len; + + inside_git_dir = 1; + if (!work_tree_env) + inside_work_tree = 0; + if (offset != len) { + root_len = offset_1st_component(cwd); + cwd[offset > root_len ? offset : root_len] = '\0'; + set_git_dir(cwd); + } else + set_git_dir("."); + check_repository_format_gently(nongit_ok); + 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. @@ -421,19 +439,9 @@ const char *setup_git_directory_gently(int *nongit_ok) for (;;) { if (cwd_contains_git_dir(&gitfile_dir)) break; - if (is_git_directory(".")) { - inside_git_dir = 1; - if (!work_tree_env) - inside_work_tree = 0; - if (offset != len) { - root_len = offset_1st_component(cwd); - cwd[offset > root_len ? offset : root_len] = '\0'; - set_git_dir(cwd); - } else - set_git_dir("."); - check_repository_format_gently(nongit_ok); - return NULL; - } + if (is_git_directory(".")) + 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) {
-- 1.7.2.rc3.593.g19611.dirty