1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-10-28 04:49:43 +01:00

config: make dependency on repo in read_early_config() explicit

The `read_early_config()` function can be used to read configuration
where a repository has not yet been set up. As such, it is optional
whether or not `the_repository` has already been initialized. If it was
initialized we use its commondir and gitdir. If not, the function will
try to detect the Git directories by itself and, if found, also parse
their config files.

This means that we implicitly rely on `the_repository`. Make this
dependency explicit by passing a `struct repository`. This allows us to
again drop the `USE_THE_REPOSITORY_VARIABLE` define in "config.c".

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-09-12 13:29:45 +02:00 committed by Junio C Hamano
parent c0b03e8b6d
commit b92266b79c
7 changed files with 20 additions and 14 deletions

View file

@ -1,3 +1,5 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
#include "alias.h"
#include "config.h"
@ -37,7 +39,7 @@ char *alias_lookup(const char *alias)
{
struct config_alias_data data = { alias, NULL };
read_early_config(config_alias_cb, &data);
read_early_config(the_repository, config_alias_cb, &data);
return data.v;
}
@ -46,7 +48,7 @@ void list_aliases(struct string_list *list)
{
struct config_alias_data data = { NULL, NULL, list };
read_early_config(config_alias_cb, &data);
read_early_config(the_repository, config_alias_cb, &data);
}
void quote_cmdline(struct strbuf *buf, const char **argv)

View file

@ -6,8 +6,6 @@
*
*/
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
#include "abspath.h"
#include "advice.h"
@ -2204,7 +2202,7 @@ static void configset_iter(struct config_set *set, config_fn_t fn, void *data)
}
}
void read_early_config(config_fn_t cb, void *data)
void read_early_config(struct repository *repo, config_fn_t cb, void *data)
{
struct config_options opts = {0};
struct strbuf commondir = STRBUF_INIT;
@ -2212,9 +2210,9 @@ void read_early_config(config_fn_t cb, void *data)
opts.respect_includes = 1;
if (have_git_dir()) {
opts.commondir = repo_get_common_dir(the_repository);
opts.git_dir = repo_get_git_dir(the_repository);
if (repo && repo->gitdir) {
opts.commondir = repo_get_common_dir(repo);
opts.git_dir = repo_get_git_dir(repo);
/*
* When setup_git_directory() was not yet asked to discover the
* GIT_DIR, we ask discover_git_directory() to figure out whether there

View file

@ -198,7 +198,7 @@ int git_config_from_parameters(config_fn_t fn, void *data);
* `the_repository` has not yet been set up, try to discover the Git
* directory to read the configuration from.
*/
void read_early_config(config_fn_t cb, void *data);
void read_early_config(struct repository *repo, config_fn_t cb, void *data);
/*
* Read config but only enumerate system and global settings.

2
help.c
View file

@ -618,7 +618,7 @@ const char *help_unknown_cmd(const char *cmd)
memset(&other_cmds, 0, sizeof(other_cmds));
memset(&aliases, 0, sizeof(aliases));
read_early_config(git_unknown_cmd_config, NULL);
read_early_config(the_repository, git_unknown_cmd_config, NULL);
/*
* Disable autocorrection prompt in a non-interactive session

View file

@ -1,3 +1,5 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
#include "config.h"
#include "editor.h"
@ -92,7 +94,8 @@ const char *git_pager(int stdout_is_tty)
pager = getenv("GIT_PAGER");
if (!pager) {
if (!pager_program)
read_early_config(core_pager_config, NULL);
read_early_config(the_repository,
core_pager_config, NULL);
pager = pager_program;
}
if (!pager)
@ -298,7 +301,7 @@ int check_pager_config(const char *cmd)
data.want = -1;
data.value = NULL;
read_early_config(pager_command_config, &data);
read_early_config(the_repository, pager_command_config, &data);
if (data.value)
pager_program = data.value;

View file

@ -96,7 +96,8 @@ int cmd__config(int argc, const char **argv)
struct config_set cs;
if (argc == 3 && !strcmp(argv[1], "read_early_config")) {
read_early_config(early_config_cb, (void *)argv[2]);
read_early_config(the_repository, early_config_cb,
(void *)argv[2]);
return 0;
}

View file

@ -1,3 +1,5 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
#include "config.h"
#include "strbuf.h"
@ -124,7 +126,7 @@ void tr2_cfg_list_config_fl(const char *file, int line)
struct tr2_cfg_data data = { file, line };
if (tr2_cfg_load_patterns() > 0)
read_early_config(tr2_cfg_cb, &data);
read_early_config(the_repository, tr2_cfg_cb, &data);
}
void tr2_list_env_vars_fl(const char *file, int line)