Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' option

Now the behavior of fetch and pull can be configured to the recently added
'on-demand' mode separately for each submodule too.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jens Lehmann 2011-03-06 23:12:19 +01:00 committed by Junio C Hamano
parent 1fb2550202
commit bf42b38405
4 changed files with 38 additions and 5 deletions

View File

@ -1823,7 +1823,7 @@ submodule.<name>.update::
linkgit:git-submodule[1] and linkgit:gitmodules[5] for details. linkgit:git-submodule[1] and linkgit:gitmodules[5] for details.


submodule.<name>.fetchRecurseSubmodules:: submodule.<name>.fetchRecurseSubmodules::
This option can be used to enable/disable recursive fetching of this This option can be used to control recursive fetching of this
submodule. It can be overridden by using the --[no-]recurse-submodules submodule. It can be overridden by using the --[no-]recurse-submodules
command line option to "git fetch" and "git pull". command line option to "git fetch" and "git pull".
This setting will override that from in the linkgit:gitmodules[5] This setting will override that from in the linkgit:gitmodules[5]

View File

@ -45,12 +45,12 @@ submodule.<name>.update::
the '--merge' or '--rebase' options. the '--merge' or '--rebase' options.


submodule.<name>.fetchRecurseSubmodules:: submodule.<name>.fetchRecurseSubmodules::
This option can be used to enable/disable recursive fetching of this This option can be used to control recursive fetching of this
submodule. If this option is also present in the submodules entry in submodule. If this option is also present in the submodules entry in
.git/config of the superproject, the setting there will override the .git/config of the superproject, the setting there will override the
one found in .gitmodules. one found in .gitmodules.
Both settings can be overridden on the command line by using the Both settings can be overridden on the command line by using the
"--[no-]recurse-submodules" option to "git fetch" and "git pull".. "--[no-]recurse-submodules" option to "git fetch" and "git pull".


submodule.<name>.ignore:: submodule.<name>.ignore::
Defines under what circumstances "git status" and the diff family show Defines under what circumstances "git status" and the diff family show

View File

@ -113,7 +113,7 @@ int parse_submodule_config_option(const char *var, const char *value)
if (!config) if (!config)
config = string_list_append(&config_fetch_recurse_submodules_for_name, config = string_list_append(&config_fetch_recurse_submodules_for_name,
strbuf_detach(&submodname, NULL)); strbuf_detach(&submodname, NULL));
config->util = git_config_bool(var, value) ? (void *)1 : NULL; config->util = (void *)(intptr_t)parse_fetch_recurse_submodules_arg(var, value);
strbuf_release(&submodname); strbuf_release(&submodname);
} else if ((len > 7) && !strcmp(var + len - 7, ".ignore")) { } else if ((len > 7) && !strcmp(var + len - 7, ".ignore")) {
if (strcmp(value, "untracked") && strcmp(value, "dirty") && if (strcmp(value, "untracked") && strcmp(value, "dirty") &&
@ -380,8 +380,13 @@ int fetch_populated_submodules(int num_options, const char **options,
struct string_list_item *fetch_recurse_submodules_option; struct string_list_item *fetch_recurse_submodules_option;
fetch_recurse_submodules_option = unsorted_string_list_lookup(&config_fetch_recurse_submodules_for_name, name); fetch_recurse_submodules_option = unsorted_string_list_lookup(&config_fetch_recurse_submodules_for_name, name);
if (fetch_recurse_submodules_option) { if (fetch_recurse_submodules_option) {
if (!fetch_recurse_submodules_option->util) if ((intptr_t)fetch_recurse_submodules_option->util == RECURSE_SUBMODULES_OFF)
continue; continue;
if ((intptr_t)fetch_recurse_submodules_option->util == RECURSE_SUBMODULES_ON_DEMAND) {
if (!unsorted_string_list_lookup(&changed_submodule_paths, ce->name))
continue;
default_argv = "on-demand";
}
} else { } else {
if (config_fetch_recurse_submodules == RECURSE_SUBMODULES_OFF) if (config_fetch_recurse_submodules == RECURSE_SUBMODULES_OFF)
continue; continue;

View File

@ -400,4 +400,32 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
test_cmp expect.err.2 actual.err test_cmp expect.err.2 actual.err
' '


test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules" '
(
cd downstream &&
git fetch --recurse-submodules
) &&
add_upstream_commit &&
git config 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 submodule.submodule.fetchRecurseSubmodules on-demand &&
git fetch >../actual.out 2>../actual.err
) &&
git config --unset fetch.recurseSubmodules &&
(
cd downstream &&
git config --unset submodule.submodule.fetchRecurseSubmodules
) &&
test_cmp expect.out.sub actual.out &&
test_cmp expect.err.2 actual.err
'

test_done test_done