Re: [PATCH 2/2] repository: move 'repository_format_worktree_config' to repo scope
- From
Derrick Stolee <derrickstolee@github.com>
- Date
- May 25, 2023, 20:13 UTC
- Message-ID
- <4d8907ba-3fe5-5bc1-e7bd-237edec31261@github.com>
- In-Reply-To
- <5ed9100a7707a529b309005419244d083cdc85ba.1684883872.git.gitgitgadget@gmail.com>
On 5/23/2023 7:17 PM, Victoria Dye via GitGitGadget wrote:
Show 24 quoted lines
> From: Victoria Dye <vdye@github.com> > > Move 'repository_format_worktree_config' out of the global scope and into > the 'repository' struct. This change is similar to how > 'repository_format_partial_clone' was moved in ebaf3bcf1ae (repository: move > global r_f_p_c to repo struct, 2021-06-17), adding to the 'repository' > struct and updating 'setup.c' & 'repository.c' functions to assign the value > appropriately. In addition, update usage of the setting to reference the > relevant context's repo or, as a fallback, 'the_repository'. > > The primary goal of this change is to be able to load worktree config for a > submodule depending on whether that submodule - not the super project - has > 'extensions.worktreeConfig' enabled. To ensure 'do_git_config_sequence()' > has access to the newly repo-scoped configuration: > > - update 'repo_read_config()' to create a 'config_source' to hold the > repo instance > - add a 'repo' argument to 'do_git_config_sequence()' > - update 'config_with_options' to call 'do_git_config_sequence()' with > 'config_source.repo', or 'the_repository' as a fallback > > Finally, add/update tests in 't3007-ls-files-recurse-submodules.sh' to > verify 'extensions.worktreeConfig' is read an used independently by super > projects and submodules.
Show 7 quoted lines
> @@ -2277,7 +2278,7 @@ int config_with_options(config_fn_t fn, void *data, > data = &inc; > } > > - if (config_source) > + if (config_source && config_source->scope != CONFIG_SCOPE_UNKNOWN) > config_reader_set_scope(&the_reader, config_source->scope);
This extra condition on config_source->scope surprised me. Could you elaborate on the reason this is necessary?
Show 5 quoted lines
> @@ -2667,11 +2670,14 @@ static void repo_read_config(struct repository *repo)
> {
> struct config_options opts = { 0 };
> struct configset_add_data data = CONFIGSET_ADD_INIT;
> + struct git_config_source config_source = { 0 };This could be...
struct git_config_source config_source = { .repo = repo };Show 7 quoted lines
> > opts.respect_includes = 1; > opts.commondir = repo->commondir; > opts.git_dir = repo->gitdir; > > + config_source.repo = repo; > +
...avoiding these lines.
Show 20 quoted lines
> diff --git a/t/t3007-ls-files-recurse-submodules.sh b/t/t3007-ls-files-recurse-submodules.sh > index e35c203241f..6d0bacef4de 100755 > --- a/t/t3007-ls-files-recurse-submodules.sh > +++ b/t/t3007-ls-files-recurse-submodules.sh > @@ -309,19 +309,30 @@ test_expect_success '--recurse-submodules parses submodule repo config' ' > test_expect_success '--recurse-submodules parses submodule worktree config' ' > test_when_finished "git -C submodule config --unset extensions.worktreeConfig" && > test_when_finished "git -C submodule config --worktree --unset feature.experimental" && > - test_when_finished "git config --unset extensions.worktreeConfig" && > > git -C submodule config extensions.worktreeConfig true && > git -C submodule config --worktree feature.experimental "invalid non-boolean value" && > > - # NEEDSWORK: the extensions.worktreeConfig is set globally based on super > - # project, so we need to enable it in the super project. > - git config extensions.worktreeConfig true && > - > test_must_fail git ls-files --recurse-submodules 2>err && > grep "bad boolean config value" err > '
These are my favorite kind of test updates: deleting extra setup that's no longer needed.
Show 15 quoted lines
> +test_expect_success '--recurse-submodules submodules ignore super project worktreeConfig extension' ' > + test_when_finished "git config --unset extensions.worktreeConfig" && > + > + # Enable worktree config in both super project & submodule, set an > + # invalid config in the submodule worktree config, then disable worktree > + # config in the submodule. The invalid worktree config should not be > + # picked up. > + git config extensions.worktreeConfig true && > + git -C submodule config extensions.worktreeConfig true && > + git -C submodule config --worktree feature.experimental "invalid non-boolean value" && > + git -C submodule config --unset extensions.worktreeConfig && > + > + git ls-files --recurse-submodules 2>err && > + ! grep "bad boolean config value" err > +'
We have the same ways to improve here using 'test_config' as recommended in patch 1.
Thanks, -Stolee