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>
Patrick Steinhardt committed
Sep 12, 2024 at 13:29 UTC
b92266b79c7bb741e3600e9dc206b693d8062fa9
7 files changed
+20
-14
alias.c
+4
-2
@@ -1,3 +1,5 @@
1
+#define USE_THE_REPOSITORY_VARIABLE
2
+
3
#include "git-compat-util.h"
4
#include "alias.h"
5
#include "config.h"
@@ -37,7 +39,7 @@ char *alias_lookup(const char *alias)
39
{
40
struct config_alias_data data = { alias, NULL };
41
40
- read_early_config(config_alias_cb, &data);
42
+ read_early_config(the_repository, config_alias_cb, &data);
43
44
return data.v;
45
}
@@ -46,7 +48,7 @@ void list_aliases(struct string_list *list)
48
{
49
struct config_alias_data data = { NULL, NULL, list };
50
49
- read_early_config(config_alias_cb, &data);
51
+ read_early_config(the_repository, config_alias_cb, &data);
52
}
53
54
void quote_cmdline(struct strbuf *buf, const char **argv)
config.c
+4
-6
@@ -6,8 +6,6 @@
6
*
7
*/
8
9
-#define USE_THE_REPOSITORY_VARIABLE
10
-
9
#include "git-compat-util.h"
10
#include "abspath.h"
11
#include "advice.h"
@@ -2204,7 +2202,7 @@ static void configset_iter(struct config_set *set, config_fn_t fn, void *data)
2202
}
2203
}
2204
2207
-void read_early_config(config_fn_t cb, void *data)
2205
+void read_early_config(struct repository *repo, config_fn_t cb, void *data)
2206
{
2207
struct config_options opts = {0};
2208
struct strbuf commondir = STRBUF_INIT;
@@ -2212,9 +2210,9 @@ void read_early_config(config_fn_t cb, void *data)
2210
2211
opts.respect_includes = 1;
2212
2215
- if (have_git_dir()) {
2216
- opts.commondir = repo_get_common_dir(the_repository);
2217
- opts.git_dir = repo_get_git_dir(the_repository);
2213
+ if (repo && repo->gitdir) {
2214
+ opts.commondir = repo_get_common_dir(repo);
2215
+ opts.git_dir = repo_get_git_dir(repo);
2216
/*
2217
* When setup_git_directory() was not yet asked to discover the
2218
* GIT_DIR, we ask discover_git_directory() to figure out whether there
config.h
+1
-1
@@ -198,7 +198,7 @@ int git_config_from_parameters(config_fn_t fn, void *data);
198
* `the_repository` has not yet been set up, try to discover the Git
199
* directory to read the configuration from.
200
*/
201
-void read_early_config(config_fn_t cb, void *data);
201
+void read_early_config(struct repository *repo, config_fn_t cb, void *data);
202
203
/*
204
* Read config but only enumerate system and global settings.
help.c
+1
-1
@@ -618,7 +618,7 @@ const char *help_unknown_cmd(const char *cmd)
618
memset(&other_cmds, 0, sizeof(other_cmds));
619
memset(&aliases, 0, sizeof(aliases));
620
621
- read_early_config(git_unknown_cmd_config, NULL);
621
+ read_early_config(the_repository, git_unknown_cmd_config, NULL);
622
623
/*
624
* Disable autocorrection prompt in a non-interactive session
pager.c
+5
-2
@@ -1,3 +1,5 @@
1
+#define USE_THE_REPOSITORY_VARIABLE
2
+
3
#include "git-compat-util.h"
4
#include "config.h"
5
#include "editor.h"
@@ -92,7 +94,8 @@ const char *git_pager(int stdout_is_tty)
94
pager = getenv("GIT_PAGER");
95
if (!pager) {
96
if (!pager_program)
95
- read_early_config(core_pager_config, NULL);
97
+ read_early_config(the_repository,
98
+ core_pager_config, NULL);
99
pager = pager_program;
100
}
101
if (!pager)
@@ -298,7 +301,7 @@ int check_pager_config(const char *cmd)
301
data.want = -1;
302
data.value = NULL;
303
301
- read_early_config(pager_command_config, &data);
304
+ read_early_config(the_repository, pager_command_config, &data);
305
306
if (data.value)
307
pager_program = data.value;
t/helper/test-config.c
+2
-1
@@ -96,7 +96,8 @@ int cmd__config(int argc, const char **argv)
96
struct config_set cs;
97
98
if (argc == 3 && !strcmp(argv[1], "read_early_config")) {
99
- read_early_config(early_config_cb, (void *)argv[2]);
99
+ read_early_config(the_repository, early_config_cb,
100
+ (void *)argv[2]);
101
return 0;
102
}
103
trace2/tr2_cfg.c
+3
-1
@@ -1,3 +1,5 @@
1
+#define USE_THE_REPOSITORY_VARIABLE
2
+
3
#include "git-compat-util.h"
4
#include "config.h"
5
#include "strbuf.h"
@@ -124,7 +126,7 @@ void tr2_cfg_list_config_fl(const char *file, int line)
126
struct tr2_cfg_data data = { file, line };
127
128
if (tr2_cfg_load_patterns() > 0)
127
- read_early_config(tr2_cfg_cb, &data);
129
+ read_early_config(the_repository, tr2_cfg_cb, &data);
130
}
131
132
void tr2_list_env_vars_fl(const char *file, int line)