[PATCH v2 5/6] setup.c: record the location of .git file
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 23:07:48
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- 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