Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- Documentation/git-submodule.txt | 8 +++++++- git-submodule.sh | 9 +++++++++ t/t7400-submodule-basic.sh | 28 ++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index a87ff72..b434d8d 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -9,7 +9,7 @@ git-submodule - Initialize, update or inspect submodules SYNOPSIS -------- [verse] -'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>] +'git submodule' [--quiet] add [-b <branch>] [-f|--force] [-g <group>][--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>] 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...] 'git submodule' [--quiet] init [--] [<path>...] @@ -59,6 +59,9 @@ instead of treating the other project as a submodule. Directories that come from both projects can be cloned and checked out as a whole if you choose to go that route. +If you manage a large set of submodules, but do not require all of them +to be checked out, you should look into the submodule groups feature. + COMMANDS -------- add:: @@ -101,6 +104,9 @@ is the superproject and submodule repositories will be kept together in the same relative location, and only the superproject's URL needs to be provided: git-submodule will correctly locate the submodule using the relative URL in .gitmodules. ++ +If at least one group argument was given, all groups are recorded in the +.gitmodules file in the groups field. status:: Show the status of the submodules. This will print the SHA-1 of the diff --git a/git-submodule.sh b/git-submodule.sh index 10c5af9..bbdcf78 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -203,6 +203,7 @@ cmd_add() { # parse $args after "submodule ... add". reference_path= + submodule_groups= while test $# -ne 0 do case "$1" in @@ -238,6 +239,10 @@ cmd_add() --depth=*) depth=$1 ;; + -g|--group) + submodule_groups=${submodule_groups:+${submodule_groups},}"$2" + shift + ;; --) shift break @@ -365,6 +370,10 @@ Use -f if you really want to add it." >&2 git config -f .gitmodules submodule."$sm_name".path "$sm_path" && git config -f .gitmodules submodule."$sm_name".url "$repo" && + if test -n "$submodule_groups" + then + git config -f .gitmodules submodule."$sm_name".groups "${submodule_groups}" + fi && if test -n "$branch" then git config -f .gitmodules submodule."$sm_name".branch "$branch" diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 5991e3c..a422df3 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -986,6 +986,7 @@ test_expect_success 'submodule with UTF-8 name' ' ' test_expect_success 'submodule add clone shallow submodule' ' + test_when_finished "rm -rf super" && mkdir super && pwd=$(pwd) && ( @@ -999,5 +1000,32 @@ test_expect_success 'submodule add clone shallow submodule' ' ) ' +test_expect_success 'submodule add records a group' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + git submodule add --group groupA file://"$pwd"/example2 submodule && + git config -f .gitmodules submodule."submodule".groups >actual && + echo groupA >expected && + test_cmp expected actual + ) +' + +test_expect_success 'submodule add records groups' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + git submodule add --group groupA -g groupB file://"$pwd"/example2 submodule && + git config -f .gitmodules submodule."submodule".groups >actual && + echo groupA,groupB >expected && + test_cmp expected actual + ) +' test_done -- 2.6.1.261.g0d9c4c1 -- 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