diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 218b5f34d6..a216be63cf 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -1063,7 +1063,7 @@ int cmd_rev_parse(int argc, continue; } if (!strcmp(arg, "--is-inside-git-dir")) { - printf("%s\n", is_inside_git_dir() ? "true" + printf("%s\n", is_inside_git_dir(the_repository) ? "true" : "false"); continue; } diff --git a/setup.c b/setup.c index ba2898473a..80f3ba0d62 100644 --- a/setup.c +++ b/setup.c @@ -26,7 +26,6 @@ #include "trace2.h" #include "worktree.h" -static int inside_git_dir = -1; static int inside_work_tree = -1; static int work_tree_config_is_bogus; enum allowed_bare_repo { @@ -299,7 +298,7 @@ void verify_filename(const char *prefix, */ void verify_non_filename(const char *prefix, const char *arg) { - if (!is_inside_work_tree() || is_inside_git_dir()) + if (!is_inside_work_tree() || is_inside_git_dir(the_repository)) return; if (*arg == '-') return; /* flag */ @@ -470,11 +469,12 @@ int is_nonbare_repository_dir(struct strbuf *path) return ret; } -int is_inside_git_dir(void) +int is_inside_git_dir(struct repository *repo) { - if (inside_git_dir < 0) - inside_git_dir = is_inside_dir(repo_get_git_dir(the_repository)); - return inside_git_dir; + struct strbuf buf = STRBUF_INIT; + int ret = is_inside_dir(strbuf_realpath(&buf, repo_get_git_dir(repo), 1)); + strbuf_release(&buf); + return ret; } int is_inside_work_tree(void) @@ -1251,7 +1251,6 @@ static const char *setup_discovered_git_dir(struct repository *repo, set_git_work_tree("."); if (strcmp(gitdir, DEFAULT_GIT_DIR_ENVIRONMENT)) set_git_dir(repo, gitdir, 0); - inside_git_dir = 0; inside_work_tree = 1; if (offset >= cwd->len) return NULL; @@ -1287,7 +1286,6 @@ static const char *setup_bare_git_dir(struct repository *repo, return setup_explicit_git_dir(repo, gitdir, cwd, repo_fmt, nongit_ok); } - inside_git_dir = 1; inside_work_tree = 0; if (offset != cwd->len) { if (chdir(cwd->buf)) diff --git a/setup.h b/setup.h index 80bc6e5f07..115bda647c 100644 --- a/setup.h +++ b/setup.h @@ -4,7 +4,7 @@ #include "refs.h" #include "string-list.h" -int is_inside_git_dir(void); +int is_inside_git_dir(struct repository *repo); int is_inside_work_tree(void); int get_common_dir_noenv(struct strbuf *sb, const char *gitdir); int get_common_dir(struct strbuf *sb, const char *gitdir);