| test_description='test protocol whitelisting with submodules' |
| . "$TEST_DIRECTORY"/lib-proto-disable.sh |
| test_expect_success 'setup repository with submodules' ' |
| git init remote/repo.git && |
| (cd remote/repo.git && test_commit one) && |
| # submodule-add should probably trust what we feed it on the cmdline, |
| # but its implementation is overly conservative. |
| GIT_ALLOW_PROTOCOL=ssh git submodule add remote:repo.git ssh-module && |
| GIT_ALLOW_PROTOCOL=ext git submodule add "ext::fake-remote %S repo.git" ext-module && |
| git commit -m "add submodules" |
| test_expect_success 'clone with recurse-submodules fails' ' |
| test_must_fail git clone --recurse-submodules . dst |
| test_expect_success 'setup individual updates' ' |
| git -C dst submodule init |
| test_expect_success 'update of ssh allowed' ' |
| git -C dst submodule update ssh-module |
| test_expect_success 'update of ext not allowed' ' |
| test_must_fail git -C dst submodule update ext-module |
| test_expect_success 'user can override whitelist' ' |
| GIT_ALLOW_PROTOCOL=ext git -C dst submodule update ext-module |