Browse Source

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 <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Nguyễn Thái Ngọc Duy 15 years ago committed by Junio C Hamano
parent
commit
a60645f9c5
  1. 1
      cache.h
  2. 12
      setup.c

1
cache.h

@ -1099,6 +1099,7 @@ int split_cmdline(char *cmdline, const char ***argv); @@ -1099,6 +1099,7 @@ int split_cmdline(char *cmdline, const char ***argv);

/* git.c */
struct startup_info {
int have_repository;
};
extern struct startup_info *startup_info;


12
setup.c

@ -317,7 +317,7 @@ const char *read_gitfile_gently(const char *path) @@ -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) @@ -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;

Loading…
Cancel
Save