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

Re: [PATCH 3/3] Introduce submodule.recurse option

From
BWBrandon Williams <bmwill@google.com>
Date
May 18, 2017, 15:39 UTC
Message-ID
<20170518153901.GB112091@google.com>
In-Reply-To
<20170517213135.20988-4-sbeller@google.com>
On 05/17, Stefan Beller wrote:
Show 6 quoted lines
> Any command that understands the boolean --recurse-submodule=[true/false]
> can have its default changed to true, by setting the submodule.recurse
> option.
> 
> git-push takes a --recurse-submodule argument but it is not boolean,
> hence it is not included (yet?).

ls-files and grep could also be added. They don't need to be added in this patch though.

Show 117 quoted lines
> 
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
>  Documentation/config.txt    |  5 +++++
>  builtin/checkout.c          |  8 +++-----
>  submodule.c                 |  7 ++++++-
>  t/lib-submodule-update.sh   | 12 ++++++++++++
>  t/t5526-fetch-submodules.sh | 10 ++++++++++
>  5 files changed, 36 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 475e874d51..e367becf72 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -3063,6 +3063,11 @@ submodule.active::
>  	submodule's path to determine if the submodule is of interest to git
>  	commands.
>  
> +submodule.recurse::
> +	Specifies if commands recurse into submodules by default. This
> +	applies to all commands that have a `--recurse-submodules` option.
> +	Defaults to false.
> +
>  submodule.fetchJobs::
>  	Specifies how many submodules are fetched/cloned at the same time.
>  	A positive integer allows up to that number of submodules fetched
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index 2787b343b1..e4bd93c9cd 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -1195,6 +1195,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
>  	opts.show_progress = -1;
>  
>  	gitmodules_config();
> +	load_submodule_config();
>  	git_config(git_checkout_config, &opts);
>  
>  	opts.track = BRANCH_TRACK_UNSPECIFIED;
> @@ -1214,11 +1215,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
>  		git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
>  	}
>  
> -	if (recurse_submodules != RECURSE_SUBMODULES_OFF) {
> -		load_submodule_config();
> -		if (recurse_submodules != RECURSE_SUBMODULES_DEFAULT)
> -			set_config_update_recurse_submodules(recurse_submodules);
> -	}
> +	if (recurse_submodules != RECURSE_SUBMODULES_DEFAULT)
> +		set_config_update_recurse_submodules(recurse_submodules);
>  
>  	if ((!!opts.new_branch + !!opts.new_branch_force + !!opts.new_orphan_branch) > 1)
>  		die(_("-b, -B and --orphan are mutually exclusive"));
> diff --git a/submodule.c b/submodule.c
> index 14ea405048..000060a253 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -91,7 +91,12 @@ int update_path_in_gitmodules(const char *oldpath, const char *newpath)
>  
>  static int submodule_config(const char *var, const char *value, void *cb)
>  {
> -	if (!strcmp(var, "submodule.fetchjobs")) {
> +	if (!strcmp(var, "submodule.recurse")) {
> +		int v = git_config_bool(var, value) ?
> +			RECURSE_SUBMODULES_ON : RECURSE_SUBMODULES_OFF;
> +		config_fetch_recurse_submodules = v;
> +		config_update_recurse_submodules = v;
> +	} else if (!strcmp(var, "submodule.fetchjobs")) {
>  		submodule_config_reading = SUBMODULE_CONFIG_EXISTS;
>  		parallel_jobs = git_config_int(var, value);
>  		if (parallel_jobs < 0)
> diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
> index 0f70b5ec7b..b30164339e 100755
> --- a/t/lib-submodule-update.sh
> +++ b/t/lib-submodule-update.sh
> @@ -990,6 +990,18 @@ test_submodule_switch_recursing () {
>  		)
>  	'
>  
> +	test_expect_success "git -c submodule.recurse=true $cmd_args --recurse-submodules: modified submodule updates submodule work tree" '
> +		prolog &&
> +		reset_work_tree_to_interested add_sub1 &&
> +		(
> +			cd submodule_update &&
> +			git branch -t modify_sub1 origin/modify_sub1 &&
> +			git -c submodule.recurse=true $cmd_args --recurse-submodules modify_sub1 &&
> +			test_superproject_content origin/modify_sub1 &&
> +			test_submodule_content sub1 origin/modify_sub1
> +		)
> +	'
> +
>  	# Updating a submodule to an invalid sha1 doesn't update the
>  	# superproject nor the submodule's work tree.
>  	test_expect_success "$command: updating to a missing submodule commit fails" '
> diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
> index f3b0a8d30a..162baf101f 100755
> --- a/t/t5526-fetch-submodules.sh
> +++ b/t/t5526-fetch-submodules.sh
> @@ -71,6 +71,16 @@ test_expect_success "fetch --recurse-submodules recurses into submodules" '
>  	test_i18ncmp expect.err actual.err
>  '
>  
> +test_expect_success "submodule.recurse option triggers recursive fetch" '
> +	add_upstream_commit &&
> +	(
> +		cd downstream &&
> +		git -c submodule.recurse fetch >../actual.out 2>../actual.err
> +	) &&
> +	test_must_be_empty actual.out &&
> +	test_i18ncmp expect.err actual.err
> +'
> +
>  test_expect_success "fetch --recurse-submodules -j2 has the same output behaviour" '
>  	add_upstream_commit &&
>  	(
> -- 
> 2.13.0.18.g7d86cc8ba0
> 
-- 
Brandon Williams
Previous: Stefan BellerNext: Stefan Beller
Message 11 of 13 in “Add option to recurse into submodules”
  1. 0/3 Add option to recurse into submodulesStefan Beller, May 17, 2017
  2. 2/3 submodule test invocation: only pass additional argumentsStefan Beller, May 17, 2017
  3. 1/3 submodule.c: add has_submodules to check if we have any submodulesStefan Beller, May 17, 2017
  4. Junio C HamanoMay 18, 2017
  5. Stefan BellerMay 18, 2017
  6. Brandon WilliamsMay 18, 2017
  7. Stefan BellerMay 18, 2017
  8. Brandon WilliamsMay 18, 2017
  9. Stefan BellerMay 18, 2017
  10. 3/3 Introduce submodule.recurse optionStefan Beller, May 17, 2017
  11. Brandon WilliamsMay 18, 2017
  12. Stefan BellerMay 18, 2017
  13. Brandon WilliamsMay 18, 2017

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.