Code

config: teach the fetch.recurseSubmodules option the 'on-demand' value
authorJens Lehmann <Jens.Lehmann@web.de>
Sun, 6 Mar 2011 22:11:48 +0000 (23:11 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 9 Mar 2011 21:10:35 +0000 (13:10 -0800)
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>
Documentation/config.txt
submodule.c
t/t5526-fetch-submodules.sh

index c5e183516a104e6efb7ed597fb4498d75560ab68..75b1d32282c218230a87a7d61f325922233f733a 100644 (file)
@@ -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
index 8d9f1db94349f080b4d01bc6b86c9d762c615815..afb0a0e3fe588a756578642b7f063b14000fe910 100644 (file)
@@ -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;
index 4cd723c9e8302adae6e58f049c6b1883267e7b0a..e6d873a48963f69f1527a63c444c452dfc93ab43 100755 (executable)
@@ -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