diff options
Diffstat (limited to 't/t7400-submodule-basic.sh')
| -rwxr-xr-x | t/t7400-submodule-basic.sh | 141 | 
1 files changed, 128 insertions, 13 deletions
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index ff265353a3..4192fe0ec6 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -18,6 +18,16 @@ test_expect_success 'setup - initial commit' '  	git branch initial  ' +test_expect_success 'configuration parsing' ' +	test_when_finished "rm -f .gitmodules" && +	cat >.gitmodules <<-\EOF && +	[submodule "s"] +		path +		ignore +	EOF +	test_must_fail git status +' +  test_expect_success 'setup - repository in init subdirectory' '  	mkdir init &&  	( @@ -78,7 +88,7 @@ test_expect_success 'submodule add' '  	(  		cd addtest &&  		git submodule add -q "$submodurl" submod >actual && -		test ! -s actual && +		test_must_be_empty actual &&  		echo "gitdir: ../.git/modules/submod" >expect &&  		test_cmp expect submod/.git &&  		( @@ -212,6 +222,32 @@ test_expect_success 'submodule add with ./, /.. and // in path' '  	test_cmp empty untracked  ' +test_expect_success 'submodule add in subdirectory' ' +	echo "refs/heads/master" >expect && +	>empty && + +	mkdir addtest/sub && +	( +		cd addtest/sub && +		git submodule add "$submodurl" ../realsubmod3 && +		git submodule init +	) && + +	rm -f heads head untracked && +	inspect addtest/realsubmod3 ../.. && +	test_cmp expect heads && +	test_cmp expect head && +	test_cmp empty untracked +' + +test_expect_success 'submodule add in subdirectory with relative path should fail' ' +	( +		cd addtest/sub && +		test_must_fail git submodule add ../../ submod3 2>../../output.err +	) && +	test_i18ngrep toplevel output.err +' +  test_expect_success 'setup - add an example entry to .gitmodules' '  	GIT_CONFIG=.gitmodules \  	git config submodule.example.url git://example.com/init.git @@ -308,7 +344,7 @@ test_expect_success 'update should work when path is an empty dir' '  	mkdir init &&  	git submodule update -q >update.out && -	test ! -s update.out && +	test_must_be_empty update.out &&  	inspect init &&  	test_cmp expect head-sha1 @@ -319,6 +355,26 @@ test_expect_success 'status should be "up-to-date" after update' '  	grep "^ $rev1" list  ' +test_expect_success 'status "up-to-date" from subdirectory' ' +	mkdir -p sub && +	( +		cd sub && +		git submodule status >../list +	) && +	grep "^ $rev1" list && +	grep "\\.\\./init" list +' + +test_expect_success 'status "up-to-date" from subdirectory with path' ' +	mkdir -p sub && +	( +		cd sub && +		git submodule status ../init >../list +	) && +	grep "^ $rev1" list && +	grep "\\.\\./init" list +' +  test_expect_success 'status should be "modified" after submodule commit' '  	(  		cd init && @@ -399,6 +455,25 @@ test_expect_success 'update --init' '  	git rev-parse --resolve-git-dir init/.git  ' +test_expect_success 'update --init from subdirectory' ' +	mv init init2 && +	git config -f .gitmodules submodule.example.url "$(pwd)/init2" && +	git config --remove-section submodule.example && +	test_must_fail git config submodule.example.url && + +	mkdir -p sub && +	( +		cd sub && +		git submodule update ../init >update.out && +		cat update.out && +		test_i18ngrep "not initialized" update.out && +		test_must_fail git rev-parse --resolve-git-dir ../init/.git && + +		git submodule update --init ../init +	) && +	git rev-parse --resolve-git-dir init/.git +' +  test_expect_success 'do not add files from a submodule' '  	git reset --hard && @@ -696,7 +771,7 @@ test_expect_success 'submodule add --name allows to replace a submodule with ano  		rm -rf repo &&  		git rm repo &&  		git submodule add -q --name repo_new "$submodurl/bare.git" repo >actual && -		test ! -s actual && +		test_must_be_empty actual &&  		echo "gitdir: ../.git/modules/submod" >expect &&  		test_cmp expect submod/.git &&  		( @@ -708,13 +783,11 @@ test_expect_success 'submodule add --name allows to replace a submodule with ano  			test_cmp expect .git  		) &&  		echo "repo" >expect && -		git config -f .gitmodules submodule.repo.path >actual && -		test_cmp expect actual && +		test_must_fail git config -f .gitmodules submodule.repo.path &&  		git config -f .gitmodules submodule.repo_new.path >actual &&  		test_cmp expect actual&&  		echo "$submodurl/repo" >expect && -		git config -f .gitmodules submodule.repo.url >actual && -		test_cmp expect actual && +		test_must_fail git config -f .gitmodules submodule.repo.url &&  		echo "$submodurl/bare.git" >expect &&  		git config -f .gitmodules submodule.repo_new.url >actual &&  		test_cmp expect actual && @@ -734,12 +807,8 @@ test_expect_success 'submodule add with an existing name fails unless forced' '  		git rm repo &&  		test_must_fail git submodule add -q --name repo_new "$submodurl/repo.git" repo &&  		test ! -d repo && -		echo "repo" >expect && -		git config -f .gitmodules submodule.repo_new.path >actual && -		test_cmp expect actual&& -		echo "$submodurl/bare.git" >expect && -		git config -f .gitmodules submodule.repo_new.url >actual && -		test_cmp expect actual && +		test_must_fail git config -f .gitmodules submodule.repo_new.path && +		test_must_fail git config -f .gitmodules submodule.repo_new.url &&  		echo "$submodurl/bare.git" >expect &&  		git config submodule.repo_new.url >actual &&  		test_cmp expect actual && @@ -772,6 +841,21 @@ test_expect_success 'submodule deinit should remove the whole submodule section  	rmdir init  ' +test_expect_success 'submodule deinit from subdirectory' ' +	git submodule update --init && +	git config submodule.example.foo bar && +	mkdir -p sub && +	( +		cd sub && +		git submodule deinit ../init >../output +	) && +	grep "\\.\\./init" output && +	test -z "$(git config --get-regexp "submodule\.example\.")" && +	test -n "$(git config --get-regexp "submodule\.example2\.")" && +	test -f example2/.git && +	rmdir init +' +  test_expect_success 'submodule deinit . deinits all initialized submodules' '  	git submodule update --init &&  	git config submodule.example.foo bar && @@ -868,4 +952,35 @@ test_expect_success 'submodule deinit fails when submodule has a .git directory  	test -n "$(git config --get-regexp "submodule\.example\.")"  ' +test_expect_success 'submodule with UTF-8 name' ' +	svname=$(printf "\303\245 \303\244\303\266") && +	mkdir "$svname" && +	( +		cd "$svname" && +		git init && +		>sub && +		git add sub && +		git commit -m "init sub" +	) && +	test_config core.precomposeunicode true && +	git submodule add ./"$svname" && +	git submodule >&2 && +	test -n "$(git submodule | grep "$svname")" +' + +test_expect_success 'submodule add clone shallow submodule' ' +	mkdir super && +	pwd=$(pwd) +	( +		cd super && +		git init && +		git submodule add --depth=1 file://"$pwd"/example2 submodule && +		( +			cd submodule && +			test 1 = $(git log --oneline | wc -l) +		) +	) +' + +  test_done  | 
