allow suppressing of global and system config
The GIT_CONFIG_NOGLOBAL and GIT_CONFIG_NOSYSTEM environment variables are magic undocumented switches that can be used to ensure a totally clean environment. This is necessary for running reliable tests, since those config files may contain settings that change the outcome of tests. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b828fef678
commit
ab88c36321
@ -79,9 +79,10 @@ static int get_value(const char* key_, const char* regex_)
|
|||||||
local = getenv(CONFIG_LOCAL_ENVIRONMENT);
|
local = getenv(CONFIG_LOCAL_ENVIRONMENT);
|
||||||
if (!local)
|
if (!local)
|
||||||
local = repo_config = xstrdup(git_path("config"));
|
local = repo_config = xstrdup(git_path("config"));
|
||||||
if (home)
|
if (git_config_global() && home)
|
||||||
global = xstrdup(mkpath("%s/.gitconfig", home));
|
global = xstrdup(mkpath("%s/.gitconfig", home));
|
||||||
system_wide = git_etc_gitconfig();
|
if (git_config_system())
|
||||||
|
system_wide = git_etc_gitconfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
key = xstrdup(key_);
|
key = xstrdup(key_);
|
||||||
|
3
cache.h
3
cache.h
@ -589,6 +589,9 @@ extern int git_config_set_multivar(const char *, const char *, const char *, int
|
|||||||
extern int git_config_rename_section(const char *, const char *);
|
extern int git_config_rename_section(const char *, const char *);
|
||||||
extern const char *git_etc_gitconfig(void);
|
extern const char *git_etc_gitconfig(void);
|
||||||
extern int check_repository_format_version(const char *var, const char *value);
|
extern int check_repository_format_version(const char *var, const char *value);
|
||||||
|
extern int git_env_bool(const char *, int);
|
||||||
|
extern int git_config_system(void);
|
||||||
|
extern int git_config_global(void);
|
||||||
|
|
||||||
#define MAX_GITNAME (1000)
|
#define MAX_GITNAME (1000)
|
||||||
extern char git_default_email[MAX_GITNAME];
|
extern char git_default_email[MAX_GITNAME];
|
||||||
|
20
config.c
20
config.c
@ -492,6 +492,22 @@ const char *git_etc_gitconfig(void)
|
|||||||
return system_wide;
|
return system_wide;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int git_env_bool(const char *k, int def)
|
||||||
|
{
|
||||||
|
const char *v = getenv(k);
|
||||||
|
return v ? git_config_bool(k, v) : def;
|
||||||
|
}
|
||||||
|
|
||||||
|
int git_config_system(void)
|
||||||
|
{
|
||||||
|
return !git_env_bool("GIT_CONFIG_NOSYSTEM", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int git_config_global(void)
|
||||||
|
{
|
||||||
|
return !git_env_bool("GIT_CONFIG_NOGLOBAL", 0);
|
||||||
|
}
|
||||||
|
|
||||||
int git_config(config_fn_t fn)
|
int git_config(config_fn_t fn)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -504,7 +520,7 @@ int git_config(config_fn_t fn)
|
|||||||
* config file otherwise. */
|
* config file otherwise. */
|
||||||
filename = getenv(CONFIG_ENVIRONMENT);
|
filename = getenv(CONFIG_ENVIRONMENT);
|
||||||
if (!filename) {
|
if (!filename) {
|
||||||
if (!access(git_etc_gitconfig(), R_OK))
|
if (git_config_system() && !access(git_etc_gitconfig(), R_OK))
|
||||||
ret += git_config_from_file(fn, git_etc_gitconfig());
|
ret += git_config_from_file(fn, git_etc_gitconfig());
|
||||||
home = getenv("HOME");
|
home = getenv("HOME");
|
||||||
filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
|
filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
|
||||||
@ -512,7 +528,7 @@ int git_config(config_fn_t fn)
|
|||||||
filename = repo_config = xstrdup(git_path("config"));
|
filename = repo_config = xstrdup(git_path("config"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (home) {
|
if (git_config_global() && home) {
|
||||||
char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
|
char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
|
||||||
if (!access(user_config, R_OK))
|
if (!access(user_config, R_OK))
|
||||||
ret = git_config_from_file(fn, user_config);
|
ret = git_config_from_file(fn, user_config);
|
||||||
|
Loading…
Reference in New Issue
Block a user