git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

Previous: Victoria DyeNext: Junio C Hamano
Message 9 of 29 in “Fix behavior of worktree config in submodules”
  1. 0/2 Fix behavior of worktree config in submodulesVictoria Dye via GitGitGadget, May 23, 2023
  2. 1/2 config: use gitdir to get worktree configVictoria Dye via GitGitGadget, May 23, 2023
  3. Glen ChooMay 25, 2023
  4. Derrick StoleeMay 25, 2023
  5. 2/2 repository: move 'repository_format_worktree_config' to repo scopeVictoria Dye via GitGitGadget, May 23, 2023
  6. Glen ChooMay 25, 2023
  7. Glen ChooMay 25, 2023
  8. Victoria DyeMay 25, 2023
  9. Derrick StoleeMay 25, 2023
  10. Junio C HamanoMay 24, 2023
  11. Glen ChooMay 25, 2023
  12. 0/3 Fix behavior of worktree config in submodulesVictoria Dye via GitGitGadget, May 26, 2023
  13. 1/3 config: use gitdir to get worktree configVictoria Dye via GitGitGadget, May 26, 2023
  14. 2/3 config: pass 'repo' directly to 'config_with_options()'Victoria Dye via GitGitGadget, May 26, 2023
  15. 3/3 repository: move 'repository_format_worktree_config' to repo scopeVictoria Dye via GitGitGadget, May 26, 2023
  16. Glen ChooMay 31, 2023
  17. Junio C HamanoJun 1, 2023
  18. Glen ChooJun 12, 2023
  19. Victoria DyeJun 7, 2023
  20. Glen ChooJun 12, 2023
  21. Victoria DyeJun 12, 2023
  22. Glen ChooJun 12, 2023
  23. setup: copy repository_format using helperGlen Choo, Jun 12, 2023
  24. Victoria DyeJun 13, 2023
  25. Glen ChooJun 13, 2023
  26. Junio C HamanoJun 13, 2023
  27. Derrick StoleeMay 26, 2023
  28. Glen ChooJun 13, 2023
  29. Victoria DyeJun 13, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.