]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: respect includes in protected config
authorGlen Choo <chooglen@google.com>
Thu, 13 Oct 2022 17:43:47 +0000 (17:43 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Oct 2022 18:39:46 +0000 (11:39 -0700)
Protected config is implemented by reading a fixed set of paths,
which ignores config [include]-s. Replace this implementation with a
call to config_with_options(), which handles [include]-s and saves us
from duplicating the logic of 1) identifying which paths to read and 2)
reading command line config.

As a result, git_configset_add_parameters() is unused, so remove it. It
was introduced alongside protected config in 5b3c650777 (config: learn
`git_protected_config()`, 2022-07-14) as a way to handle command line
config.

Signed-off-by: Glen Choo <chooglen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c
t/t0033-safe-directory.sh
t/t0035-safe-bare-repository.sh

index e8ebef77d5c92423f7af85d9176059e2a772a320..be0e789ccf6e848d331c169cf6ca4e4b731a7a1b 100644 (file)
--- a/config.c
+++ b/config.c
@@ -2391,11 +2391,6 @@ int git_configset_add_file(struct config_set *cs, const char *filename)
        return git_config_from_file(config_set_callback, filename, cs);
 }
 
-int git_configset_add_parameters(struct config_set *cs)
-{
-       return git_config_from_parameters(config_set_callback, cs);
-}
-
 int git_configset_get_value(struct config_set *cs, const char *key, const char **value)
 {
        const struct string_list *values = NULL;
@@ -2640,24 +2635,15 @@ int repo_config_get_pathname(struct repository *repo,
 /* Read values into protected_config. */
 static void read_protected_config(void)
 {
-       char *xdg_config = NULL, *user_config = NULL, *system_config = NULL;
-
+       struct config_options opts = {
+               .respect_includes = 1,
+               .ignore_repo = 1,
+               .ignore_worktree = 1,
+               .system_gently = 1,
+       };
        git_configset_init(&protected_config);
-
-       system_config = git_system_config();
-       git_global_config(&user_config, &xdg_config);
-
-       if (system_config)
-               git_configset_add_file(&protected_config, system_config);
-       if (xdg_config)
-               git_configset_add_file(&protected_config, xdg_config);
-       if (user_config)
-               git_configset_add_file(&protected_config, user_config);
-       git_configset_add_parameters(&protected_config);
-
-       free(system_config);
-       free(xdg_config);
-       free(user_config);
+       config_with_options(config_set_callback, &protected_config,
+                           NULL, &opts);
 }
 
 void git_protected_config(config_fn_t fn, void *data)
index f4d737dadd04a1b582ed765acdddd5ddad14d5de..2dec021e0c359207811b193e00114122b6ffd408 100755 (executable)
@@ -70,4 +70,13 @@ test_expect_success 'safe.directory=*, but is reset' '
        expect_rejected_dir
 '
 
+test_expect_success 'safe.directory in included file' '
+       cat >gitconfig-include <<-EOF &&
+       [safe]
+               directory = "$(pwd)"
+       EOF
+       git config --global --add include.path "$(pwd)/gitconfig-include" &&
+       git status
+'
+
 test_done
index ecbdc8238db988ee23ea3c66ddbf30fbd3777520..11c15a48aab57ee81245a933f5dfdab5210103a5 100755 (executable)
@@ -51,4 +51,13 @@ test_expect_success 'safe.bareRepository on the command line' '
                -c safe.bareRepository=all
 '
 
+test_expect_success 'safe.bareRepository in included file' '
+       cat >gitconfig-include <<-\EOF &&
+       [safe]
+               bareRepository = explicit
+       EOF
+       git config --global --add include.path "$(pwd)/gitconfig-include" &&
+       expect_rejected -C outer-repo/bare-repo
+'
+
 test_done