The new switch `--init-default-group` updates the submodules which are configured in `submodule.updateGroup` Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- Documentation/config.txt | 5 ++++ Documentation/git-submodule.txt | 4 ++-- git-submodule.sh | 14 +++++++++-- t/t7400-submodule-basic.sh | 53 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 4 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 59d7046..0f20019 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -2735,6 +2735,11 @@ submodule.fetchJobs:: in parallel. A value of 0 will give some reasonable default. If unset, it defaults to 1. +submodule.updateGroup:: + Specifies the group of submodules when `git submodule --init-group` + is called with no arguments. This setting is recorded in the initial + clone when `--init-submodule` was given. + tag.sort:: This variable controls the sort ordering of tags when displayed by linkgit:git-tag[1]. Without the "--sort=<value>" option provided, the diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index 35ca355..e658d15 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -14,9 +14,9 @@ SYNOPSIS 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<submodulespec>...] 'git submodule' [--quiet] init [--] [<submodulespec>...] 'git submodule' [--quiet] deinit [-f|--force] [--] <submodulespec>... -'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch] +'git submodule' [--quiet] update [--init[-default-group]] [--remote] [-N|--no-fetch] [-f|--force] [--rebase|--merge] [--reference <repository>] - [--depth <depth>] [--recursive] [--jobs <n>] [--] [<path>...] + [--depth <depth>] [--recursive] [--jobs <n>] [--] [<submodulespec>...] 'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...] 'git submodule' [--quiet] foreach [--recursive] <command> diff --git a/git-submodule.sh b/git-submodule.sh index c8e36c5..2b0b0cb 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -522,7 +522,12 @@ cmd_update() GIT_QUIET=1 ;; -i|--init) - init=1 + test -z $init || test $init = by_args || die "$(gettext "Only one of --init or --init-default-group may be used.")" + init=by_args + ;; + --init-default-group) + test -z $init || test $init = by_config || die "$(gettext "Only one of --init or --init-default-group may be used.")" + init=by_config ;; --remote) remote=1 @@ -585,7 +590,12 @@ cmd_update() if test -n "$init" then - cmd_init "--" "$@" || return + additional_init= + if test "$init" = "by_config" + then + additional_init=$(git config --get-all submodule.updateGroup) + fi + cmd_init "--" "$@" ${additional_init:+$additional_init} || return fi { diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 0adc4e4..41e65c2 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -1139,4 +1139,57 @@ test_expect_success 'submodule add recording wrong labels reports an error' ' test_i18ngrep alphanumeric actual ' +test_expect_success 'setup superproject with labeled submodules' ' + mkdir sub1 && + ( + cd sub1 && + git init && + test_commit test + test_commit test2 + ) && + mkdir labeledsuper && + ( + cd labeledsuper && + git init && + git submodule add ../sub1 sub0 && + git submodule add -l bit1 ../sub1 sub1 && + git submodule add -l bit2 ../sub1 sub2 && + git submodule add -l bit2 -l bit1 ../sub1 sub3 && + git commit -m "add labeled submodules" + ) +' + +cat >expect <<-EOF +-sub0 + sub1 (test2) + sub2 (test2) + sub3 (test2) +EOF + +test_expect_success 'submodule update --init with a group' ' + test_when_finished "rm -rf labeledsuper_clone" && + pwd=$(pwd) && + git clone file://"$pwd"/labeledsuper labeledsuper_clone && + ( + cd labeledsuper_clone && + git submodule update --init \*bit1 ./sub2 && + git submodule status |cut -c 1,43- >../actual + ) && + test_cmp expect actual +' + +test_expect_success 'submodule update --init-default-group' ' + test_when_finished "rm -rf labeledsuper_clone" && + pwd=$(pwd) && + git clone file://"$pwd"/labeledsuper labeledsuper_clone && + ( + cd labeledsuper_clone && + git config submodule.updateGroup \*bit1 && + git config --add submodule.updateGroup ./sub2 && + git submodule update --init-default-group && + git submodule status |cut -c 1,43- >../actual + ) && + test_cmp expect actual +' + test_done -- 2.8.0.35.g58985d9.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html