[PATCH v2 5/6] setup.c: record the location of .git file
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
cache.h | 1 +
setup.c | 12 ++++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/cache.h b/cache.h
index fbe29ac..c912afb 100644
--- a/cache.h
+++ b/cache.h
@@ -1728,6 +1728,7 @@ const char *split_cmdline_strerror(int cmdline_errno);
struct startup_info {
int have_repository;
const char *prefix;
+ const char *first_gitfile;
};
extern struct startup_info *startup_info;
diff --git a/setup.c b/setup.c
index 8b02429..0489f54 100644
--- a/setup.c
+++ b/setup.c
@@ -550,6 +550,8 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
gitfile = (char*)read_gitfile(gitdirenv);
if (gitfile) {
gitfile = xstrdup(gitfile);
+ if (startup_info && !startup_info->first_gitfile)
+ startup_info->first_gitfile = real_path_dup(gitdirenv);
gitdirenv = gitfile;
}
@@ -834,9 +836,12 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)
current_device = get_device_or_die(".", NULL, 0);
for (;;) {
gitfile = (char*)read_gitfile(DEFAULT_GIT_DIR_ENVIRONMENT);
- if (gitfile)
+ if (gitfile) {
gitdirenv = gitfile = xstrdup(gitfile);
- else {
+ if (startup_info && !startup_info->first_gitfile)
+ startup_info->first_gitfile =
+ real_path_dup(DEFAULT_GIT_DIR_ENVIRONMENT);
+ } else {
if (is_git_directory(DEFAULT_GIT_DIR_ENVIRONMENT))
gitdirenv = DEFAULT_GIT_DIR_ENVIRONMENT;
}
@@ -885,6 +890,9 @@ const char *setup_git_directory_gently(int *nongit_ok)
{
const char *prefix;
+ if (startup_info)
+ startup_info->first_gitfile = NULL;
+
prefix = setup_git_directory_gently_1(nongit_ok);
if (prefix)
setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
--
2.7.0.96.g5373197