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

[PATCH v3 3/7] config: teach the fetch.recurseSubmodules option the 'on-demand' value

From
Jens Lehmann <jens.lehmann@web.de>
Date
Mar 1, 2011, 23:02 UTC
Message-ID
<4D6D7B00.1020807@web.de>
In-Reply-To
<4D6D7A50.5090802@web.de>

To enable the user to change the default behavior of "git fetch" and "git pull" regarding submodule recursion add the new "on-demand" value which has just been added to the "--recurse-submodules" command line option.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
---
 Documentation/config.txt    |   10 +++++++---
 submodule.c                 |    2 +-
 t/t5526-fetch-submodules.sh |   28 ++++++++++++++++++++++++++++
 3 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 96ce272..7b06fe5 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -900,9 +900,13 @@ diff.wordRegex::
 	characters are *ignorable* whitespace.

 fetch.recurseSubmodules::
-	A boolean value which changes the behavior for fetch and pull, the
-	default is to not recursively fetch populated submodules unless
-	configured otherwise.
+	This option can be either set to a boolean value or to 'on-demand'.
+	Setting it to a boolean changes the behavior of fetch and pull to
+	unconditionally recurse into submodules when set to true or to not
+	recurse at all when set to false. When set to 'on-demand' (the default
+	value), it tells fetch and pull to recurse only into those submodules
+	where new commits are recorded in the commmits fetched for the
+	superproject.

 fetch.unpackLimit::
 	If the number of objects fetched over the git native
diff --git a/submodule.c b/submodule.c
index 86a99af..a1753f0 100644
--- a/submodule.c
+++ b/submodule.c
@@ -71,7 +71,7 @@ int submodule_config(const char *var, const char *value, void *cb)
 	if (!prefixcmp(var, "submodule."))
 		return parse_submodule_config_option(var, value);
 	else if (!strcmp(var, "fetch.recursesubmodules")) {
-		config_fetch_recurse_submodules = git_config_bool(var, value);
+		config_fetch_recurse_submodules = parse_fetch_recurse_submodules_arg(var, value);
 		return 0;
 	}
 	return 0;
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index 4cd723c..e6d873a 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -372,4 +372,32 @@ test_expect_success "'--recurse-submodules=on-demand' stops when no new submodul
 	test_cmp expect.err.file actual.err
 '

+test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config" '
+	(
+		cd downstream &&
+		git fetch --recurse-submodules
+	) &&
+	add_upstream_commit &&
+	git config --global fetch.recurseSubmodules false &&
+	head1=$(git rev-parse --short HEAD) &&
+	git add submodule &&
+	git commit -m "new submodule" &&
+	head2=$(git rev-parse --short HEAD) &&
+	echo "From $pwd/." > expect.err.2 &&
+	echo "   $head1..$head2  master     -> origin/master" >> expect.err.2
+	head -2 expect.err >> expect.err.2 &&
+	(
+		cd downstream &&
+		git config fetch.recurseSubmodules on-demand &&
+		git fetch >../actual.out 2>../actual.err
+	) &&
+	git config --global --unset fetch.recurseSubmodules &&
+	(
+		cd downstream &&
+		git config --unset fetch.recurseSubmodules
+	) &&
+	test_cmp expect.out.sub actual.out &&
+	test_cmp expect.err.2 actual.err
+'
+
 test_done
-- 
1.7.4.1.291.g6060
Previous: Marc BranchaudNext: Marc Branchaud
Message 7 of 16 in “Teach fetch/pull the on-demand mode and make it the default”
  1. 0/7 Teach fetch/pull the on-demand mode and make it the defaultJens Lehmann, Mar 1, 2011
  2. 1/7 fetch/pull: recurse into submodules when necessaryJens Lehmann, Mar 1, 2011
  3. Marc BranchaudMar 2, 2011
  4. 2/7 fetch/pull: Add the 'on-demand' value to the --recurse-submodules optionJens Lehmann, Mar 1, 2011
  5. Marc BranchaudMar 2, 2011
  6. Marc BranchaudMar 2, 2011
  7. 3/7 config: teach the fetch.recurseSubmodules option the 'on-demand' valueJens Lehmann, Mar 1, 2011
  8. Marc BranchaudMar 2, 2011
  9. 4/7 Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' optionJens Lehmann, Mar 1, 2011
  10. 5/7 fetch/pull: Don't recurse into a submodule when commits are already presentJens Lehmann, Mar 1, 2011
  11. Marc BranchaudMar 2, 2011
  12. 6/7 submodule update: Don't fetch when the submodule commit is already presentJens Lehmann, Mar 1, 2011
  13. 7/7 fetch/pull: Describe --recurse-submodule restrictions in the BUGS sectionJens Lehmann, Mar 1, 2011
  14. Jens LehmannMar 2, 2011
  15. Marc BranchaudMar 2, 2011
  16. Jens LehmannMar 2, 2011

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.