As submodule--helper list is the building block for some submodule commands (foreach, deinit, status, sync), also add tests for those. Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- builtin/submodule--helper.c | 13 ++++++ t/t7413-submodule--helper.sh | 97 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 7b9a4d7..adb6188 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -271,6 +271,7 @@ static int module_list(int argc, const char **argv, const char *prefix) int i; struct pathspec pathspec; struct module_list list = MODULE_LIST_INIT; + const struct string_list *group = NULL; struct option module_list_options[] = { OPT_STRING(0, "prefix", &prefix, @@ -292,9 +293,21 @@ static int module_list(int argc, const char **argv, const char *prefix) return 1; } + if (!pathspec.nr) + group = git_config_get_value_multi("submodule.defaultGroup"); + if (group) + gitmodules_config(); + for (i = 0; i < list.nr; i++) { const struct cache_entry *ce = list.entries[i]; + if (group) { + const struct submodule *sub = + submodule_from_path(null_sha1, ce->name); + if (!submodule_in_group(group, sub)) + continue; + } + if (ce_stage(ce)) printf("%06o %s U\t", ce->ce_mode, sha1_to_hex(null_sha1)); else diff --git a/t/t7413-submodule--helper.sh b/t/t7413-submodule--helper.sh index c6939ab..1b5d135 100755 --- a/t/t7413-submodule--helper.sh +++ b/t/t7413-submodule--helper.sh @@ -78,4 +78,101 @@ test_expect_success 'in-group' ' ) ' +submodule_sha1=$(git -C sub rev-parse HEAD) + +cat >expect <<-EOF +160000 $submodule_sha1 0 sub0 +160000 $submodule_sha1 0 sub1 +160000 $submodule_sha1 0 sub3 +EOF + +test_expect_success 'submodule--helper list respects groups' ' + ( + cd super && + git config --add submodule.defaultGroup *bit1 && + git config --add submodule.defaultGroup ./sub0 && + git submodule--helper list >../actual + ) && + test_cmp expect actual +' + +cat >expect <<-EOF +Entering 'sub0' +$submodule_sha1 sub0 +Entering 'sub1' +$submodule_sha1 sub1 +Entering 'sub3' +$submodule_sha1 sub3 +EOF + +test_expect_success 'submodule foreach respects groups' ' + ( + cd super && + git submodule foreach "echo \$sha1 \$name" >../actual + ) && + test_cmp expect actual +' + +sub_priorsha1=$(git -C sub rev-parse HEAD^) + +cat >expect <<-EOF ++$sub_priorsha1 sub0 (test) ++$sub_priorsha1 sub1 (test) ++$sub_priorsha1 sub3 (test) +EOF + +test_expect_success 'submodule status respects groups' ' + git clone --recurse-submodules super super_clone && + ( + cd super_clone && + git -C sub0 checkout HEAD^ && + git -C sub1 checkout HEAD^ && + git -C sub2 checkout HEAD^ && + git -C sub3 checkout HEAD^ && + git config --add submodule.defaultGroup *bit1 && + git config --add submodule.defaultGroup ./sub0 && + git submodule status >../actual && + git config --unset-all submodule.defaultGroup && + git submodule update + ) && + test_cmp expect actual +' + +test_expect_success 'submodule deinit respects groups' ' + suburl=$(pwd)/sub && + ( + cd super_clone && + git config --add submodule.defaultGroup *bit1 && + git config --add submodule.defaultGroup ./sub0 && + git submodule deinit && + test_must_fail git config submodule.sub0.url && + test_must_fail git config submodule.sub1.url && + test "$(git config submodule.sub2.url)" = "$suburl" && + test_must_fail git config submodule.sub3.url && + git config --unset-all submodule.defaultGroup && + git submodule init + ) +' + +test_expect_success 'submodule sync respects groups' ' + suburl=$(pwd)/sub && + ( + cd super_clone && + git config submodule.sub0.url nonsense && + git config submodule.sub1.url nonsense && + git config submodule.sub2.url nonsense && + git config submodule.sub3.url nonsense && + git config --add submodule.defaultGroup *bit1 && + git config --add submodule.defaultGroup ./sub0 && + git submodule sync && + git config --unset-all submodule.defaultGroup && + test "$(git config submodule.sub0.url)" = "$suburl" && + test "$(git config submodule.sub1.url)" = "$suburl" && + test "$(git config submodule.sub2.url)" = "nonsense" && + test "$(git config submodule.sub3.url)" = "$suburl" && + git submodule sync sub2 && + test "$(git config submodule.sub2.url)" = "$suburl" + ) +' + test_done -- 2.8.0.41.g8d9aeb3 -- 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