path: root/setup.c
diff options
authorNguyễn Thái Ngọc Duy <>2010-08-06 02:46:33 (GMT)
committerJunio C Hamano <>2010-08-11 16:24:00 (GMT)
commita60645f9c54c3050cbe25882feba9d5b3d1ca0d6 (patch)
treed35ccc244577a997491becdd5802dfe9bc50e4d7 /setup.c
parente37c1329fa86683c828f04b51bad8bae03939ced (diff)
setup: remember whether repository was found
As v1.7.2~16^2 (git --paginate: paginate external commands again, 2010-07-14) explains, builtins (like git config) that do not use RUN_SETUP are not finding GIT_DIR set correctly when it is time to launch the pager from run_builtin(). If they were to search for a repository sooner, then the outcome of such early repository accesses would be more predictable and reliable. The cmd_*() functions learn whether a repository was found through the *nongit_ok return value from setup_git_directory_gently(). If run_builtin() is to take care of the repository search itself, that datum needs to be retrievable from somewhere else. Use the startup_info struct for this. As a bonus, this information becomes available to functions such as git_config() which might want to avoid trying to access a repository when none is present. Signed-off-by: Nguyễn Thái Ngọc Duy <> Signed-off-by: Junio C Hamano <> Signed-off-by: Jonathan Nieder <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'setup.c')
1 files changed, 11 insertions, 1 deletions
diff --git a/setup.c b/setup.c
index 2769160..28a2b69 100644
--- a/setup.c
+++ b/setup.c
@@ -317,7 +317,7 @@ const char *read_gitfile_gently(const char *path)
* 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.
-const char *setup_git_directory_gently(int *nongit_ok)
+static const char *setup_git_directory_gently_1(int *nongit_ok)
const char *work_tree_env = getenv(GIT_WORK_TREE_ENVIRONMENT);
const char *env_ceiling_dirs = getenv(CEILING_DIRECTORIES_ENVIRONMENT);
@@ -473,6 +473,16 @@ const char *setup_git_directory_gently(int *nongit_ok)
return cwd + offset;
+const char *setup_git_directory_gently(int *nongit_ok)
+ const char *prefix;
+ prefix = setup_git_directory_gently_1(nongit_ok);
+ if (startup_info)
+ startup_info->have_repository = !nongit_ok || !*nongit_ok;
+ return prefix;
int git_config_perm(const char *var, const char *value)
int i;