| #!/bin/sh | 
 |  | 
 | test_description='test protocol whitelisting with submodules' | 
 | . ./test-lib.sh | 
 | . "$TEST_DIRECTORY"/lib-proto-disable.sh | 
 |  | 
 | setup_ext_wrapper | 
 | setup_ssh_wrapper | 
 |  | 
 | test_expect_success 'setup repository with submodules' ' | 
 | 	mkdir remote && | 
 | 	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' ' | 
 | 	rm -rf dst && | 
 | 	git clone . dst && | 
 | 	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 | 
 | ' | 
 |  | 
 | test_done |