]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: unify code paths to get global config paths
authorPatrick Steinhardt <ps@pks.im>
Mon, 19 Apr 2021 12:31:12 +0000 (14:31 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Apr 2021 21:16:59 +0000 (14:16 -0700)
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>
builtin/config.c
config.c
config.h

index 02ed0b3fe777100f4f1cfe36e8285ea1656ba7b2..865fddd6ce8535522e540c3302c60c1ec19737a7 100644 (file)
@@ -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
index 3199b1b30c73803470f50f2c5740361edf474e7e..8900d96cb63232358bd3f3df869b6356410f5934 100644 (file)
--- a/config.c
+++ b/config.c
@@ -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'.
@@ -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;
 
@@ -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);
 
index 2be8fa18803d9be71c30944aa7ab23b94e088900..9038538ffdcb8de68b3367c6f4a1534b23e6aafc 100644 (file)
--- a/config.h
+++ b/config.h
@@ -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);