On Tue, Apr 13, 2021 at 09:11:44AM +0200, Patrick Steinhardt wrote: > The `git_etc_gitconfig()` function retrieves the system-level path of > the configuration file. We're about to introduce a way to override it > via an environment variable, at which point the name of this function > would start to become misleading. > > Rename the function to `git_system_config()` as a preparatory step. > While at it, the function is also refactored to pass memory ownership to > the caller. This is done to better match semantics of > `git_global_config()`, which is going to be introduced in the next > commit. > > Signed-off-by: Patrick Steinhardt <ps@xxxxxx> > --- > builtin/config.c | 2 +- > config.c | 18 ++++++++---------- > config.h | 3 ++- > 3 files changed, 11 insertions(+), 12 deletions(-) > > diff --git a/builtin/config.c b/builtin/config.c > index f71fa39b38..02ed0b3fe7 100644 > --- a/builtin/config.c > +++ b/builtin/config.c > @@ -695,7 +695,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) > } > } > else if (use_system_config) { > - given_config_source.file = git_etc_gitconfig(); > + given_config_source.file = git_system_config(); > given_config_source.scope = CONFIG_SCOPE_SYSTEM; > } else if (use_local_config) { > given_config_source.file = git_pathdup("config"); > diff --git a/config.c b/config.c > index 6428393a41..8c83669cce 100644 > --- a/config.c > +++ b/config.c > @@ -1844,12 +1844,9 @@ static int git_config_from_blob_ref(config_fn_t fn, > return git_config_from_blob_oid(fn, name, &oid, data); > } > > -const char *git_etc_gitconfig(void) > +char *git_system_config(void) > { > - static const char *system_wide; > - if (!system_wide) > - system_wide = system_path(ETC_GITCONFIG); > - return system_wide; > + return system_path(ETC_GITCONFIG); > } > > /* > @@ -1883,6 +1880,7 @@ static int do_git_config_sequence(const struct config_options *opts, > config_fn_t fn, void *data) > { > 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 *repo_config; > @@ -1896,11 +1894,10 @@ static int do_git_config_sequence(const struct config_options *opts, > repo_config = NULL; > > current_parsing_scope = CONFIG_SCOPE_SYSTEM; > - if (git_config_system() && !access_or_die(git_etc_gitconfig(), R_OK, Removing git_config_system() from the condition breaks GIT_CONFIG_NOSYSTEM: expecting success of 9999.1 'test': cat /usr/local/etc/gitconfig && git config --list --show-origin --show-scope + cat /usr/local/etc/gitconfig [foo] bar = baz + git config --list --show-origin --show-scope system file:/usr/local/etc/gitconfig foo.bar=baz local file:.git/config core.repositoryformatversion=0 local file:.git/config core.filemode=true local file:.git/config core.bare=false local file:.git/config core.logallrefupdates=true ok 1 - test And breaks just about everything the Linux32 job on Travis CI: https://travis-ci.org/github/git/git/jobs/767207687#L1218 > - opts->system_gently ? > - ACCESS_EACCES_OK : 0)) > - ret += git_config_from_file(fn, git_etc_gitconfig(), > - data); > + if (system_config && !access_or_die(system_config, R_OK, > + opts->system_gently ? > + ACCESS_EACCES_OK : 0)) > + ret += git_config_from_file(fn, system_config, data); > > current_parsing_scope = CONFIG_SCOPE_GLOBAL; > if (xdg_config && !access_or_die(xdg_config, R_OK, ACCESS_EACCES_OK)) > @@ -1927,6 +1924,7 @@ static int do_git_config_sequence(const struct config_options *opts, > die(_("unable to parse command-line config")); > > current_parsing_scope = prev_parsing_scope; > + free(system_config); > free(xdg_config); > free(user_config); > free(repo_config); > diff --git a/config.h b/config.h > index 19a9adbaa9..2be8fa1880 100644 > --- a/config.h > +++ b/config.h > @@ -318,7 +318,6 @@ int git_config_rename_section(const char *, const char *); > int git_config_rename_section_in_file(const char *, const char *, const char *); > int git_config_copy_section(const char *, const char *); > int git_config_copy_section_in_file(const char *, const char *, const char *); > -const char *git_etc_gitconfig(void); > int git_env_bool(const char *, int); > unsigned long git_env_ulong(const char *, unsigned long); > int git_config_system(void); > @@ -327,6 +326,8 @@ int config_error_nonbool(const char *); > #define config_error_nonbool(s) (config_error_nonbool(s), const_error()) > #endif > > +char *git_system_config(void); > + > int git_config_parse_parameter(const char *, config_fn_t fn, void *data); > > enum config_scope current_config_scope(void); > -- > 2.31.1 >