The new switch `--init-default-group` updates the submodules which are
configured in `submodule.updateGroup`

Signed-off-by: Stefan Beller <sbel...@google.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to