Skip to content

Commit

Permalink
Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' option
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jens Lehmann authored and Junio C Hamano committed Mar 9, 2011
1 parent 1fb2550 commit bf42b38
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1823,7 +1823,7 @@ submodule.<name>.update::
linkgit:git-submodule[1] and linkgit:gitmodules[5] for details.

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
command line option to "git fetch" and "git pull".
This setting will override that from in the linkgit:gitmodules[5]
Expand Down
4 changes: 2 additions & 2 deletions Documentation/gitmodules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ submodule.<name>.update::
the '--merge' or '--rebase' options.

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
.git/config of the superproject, the setting there will override the
one found in .gitmodules.
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::
Defines under what circumstances "git status" and the diff family show
Expand Down
9 changes: 7 additions & 2 deletions submodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ int parse_submodule_config_option(const char *var, const char *value)
if (!config)
config = string_list_append(&config_fetch_recurse_submodules_for_name,
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);
} else if ((len > 7) && !strcmp(var + len - 7, ".ignore")) {
if (strcmp(value, "untracked") && strcmp(value, "dirty") &&
Expand Down Expand Up @@ -380,8 +380,13 @@ int fetch_populated_submodules(int num_options, const char **options,
struct string_list_item *fetch_recurse_submodules_option;
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->util)
if ((intptr_t)fetch_recurse_submodules_option->util == RECURSE_SUBMODULES_OFF)
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 {
if (config_fetch_recurse_submodules == RECURSE_SUBMODULES_OFF)
continue;
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 @@ -400,4 +400,32 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
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

0 comments on commit bf42b38

Please sign in to comment.