Merge branch 'gc/bare-repo-discovery'

Allow configuration files in "protected" scopes to include other
configuration files.

* gc/bare-repo-discovery:
  config: respect includes in protected config
This commit is contained in:
Junio C Hamano 2022-10-25 17:11:44 -07:00
commit 777f548b5a
3 changed files with 26 additions and 22 deletions

View File

@ -2392,11 +2392,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;
@ -2641,24 +2636,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)

View File

@ -71,4 +71,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

View File

@ -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