diff options
author | Jens Lehmann <Jens.Lehmann@web.de> | 2011-03-06 23:11:48 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-03-09 13:10:35 -0800 |
commit | 1fb2550202d6f88d90121624c1fac0b81ff8c33f (patch) | |
tree | 8c0ec680547c297a8cc9bf9a6f8313c89d3d0eec | |
parent | fetch/pull: Add the 'on-demand' value to the --recurse-submodules option (diff) | |
download | tgif-1fb2550202d6f88d90121624c1fac0b81ff8c33f.tar.xz |
config: teach the fetch.recurseSubmodules option the 'on-demand' value
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | Documentation/config.txt | 10 | ||||
-rw-r--r-- | submodule.c | 2 | ||||
-rwxr-xr-x | t/t5526-fetch-submodules.sh | 28 |
3 files changed, 36 insertions, 4 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt index c5e183516a..75b1d32282 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), fetch and pull will only recurse into a populated submodule + when its superproject retrieves a commit that updates the submodule's + reference. fetch.unpackLimit:: If the number of objects fetched over the git native diff --git a/submodule.c b/submodule.c index 8d9f1db943..afb0a0e3fe 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 4cd723c9e8..e6d873a489 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 |