Skip to content

Commit

Permalink
config: unify code paths to get global config paths
Browse files Browse the repository at this point in the history
There's two callsites which assemble global config paths, once in the
config loading code and once in the git-config(1) builtin. We're about
to implement a way to override global config paths via an environment
variable which would require us to adjust both sites.

Unify both code paths into a single `git_global_config()` function which
returns both paths for `~/.gitconfig` and the XDG config file. This will
make the subsequent patch which introduces the new envvar easier to
implement.

No functional changes are expected from this patch.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
pks-t authored and gitster committed Apr 19, 2021
1 parent c62a999 commit 1e06eb9
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
4 changes: 2 additions & 2 deletions builtin/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -671,9 +671,9 @@ int cmd_config(int argc, const char **argv, const char *prefix)
}

if (use_global_config) {
char *user_config = expand_user_path("~/.gitconfig", 0);
char *xdg_config = xdg_config_home("config");
char *user_config, *xdg_config;

git_global_config(&user_config, &xdg_config);
if (!user_config)
/*
* It is unknown if HOME/.gitconfig exists, so
Expand Down
12 changes: 10 additions & 2 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -1849,6 +1849,12 @@ char *git_system_config(void)
return system_path(ETC_GITCONFIG);
}

void git_global_config(char **user_config, char **xdg_config)
{
*user_config = expand_user_path("~/.gitconfig", 0);
*xdg_config = xdg_config_home("config");
}

/*
* Parse environment variable 'k' as a boolean (in various
* possible spellings); if missing, use the default value 'def'.
Expand Down Expand Up @@ -1881,8 +1887,8 @@ static int do_git_config_sequence(const struct config_options *opts,
{
int ret = 0;
char *system_config = git_system_config();
char *xdg_config = xdg_config_home("config");
char *user_config = expand_user_path("~/.gitconfig", 0);
char *xdg_config = NULL;
char *user_config = NULL;
char *repo_config;
enum config_scope prev_parsing_scope = current_parsing_scope;

Expand All @@ -1900,6 +1906,8 @@ static int do_git_config_sequence(const struct config_options *opts,
ret += git_config_from_file(fn, system_config, data);

current_parsing_scope = CONFIG_SCOPE_GLOBAL;
git_global_config(&user_config, &xdg_config);

if (xdg_config && !access_or_die(xdg_config, R_OK, ACCESS_EACCES_OK))
ret += git_config_from_file(fn, xdg_config, data);

Expand Down
1 change: 1 addition & 0 deletions config.h
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ int config_error_nonbool(const char *);
#endif

char *git_system_config(void);
void git_global_config(char **user, char **xdg);

int git_config_parse_parameter(const char *, config_fn_t fn, void *data);

Expand Down

0 comments on commit 1e06eb9

Please sign in to comment.