Skip to content

Commit

Permalink
config: teach the fetch.recurseSubmodules option the 'on-demand' value
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jens Lehmann authored and Junio C Hamano committed Mar 9, 2011
1 parent 8f0700d commit 1fb2550
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 4 deletions.
10 changes: 7 additions & 3 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion submodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
28 changes: 28 additions & 0 deletions t/t5526-fetch-submodules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 1fb2550

Please sign in to comment.