diff options
Diffstat (limited to 't/t7400-submodule-basic.sh')
| -rwxr-xr-x | t/t7400-submodule-basic.sh | 123 | 
1 files changed, 120 insertions, 3 deletions
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 540771ca41..b77cce8e40 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -11,6 +11,10 @@ subcommands of git submodule.  . ./test-lib.sh +test_expect_success 'submodule deinit works on empty repository' ' +	git submodule deinit --all +' +  test_expect_success 'setup - initial commit' '  	>t &&  	git add t && @@ -18,6 +22,22 @@ test_expect_success 'setup - initial commit' '  	git branch initial  ' +test_expect_success 'submodule init aborts on missing .gitmodules file' ' +	test_when_finished "git update-index --remove sub" && +	git update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub && +	# missing the .gitmodules file here +	test_must_fail git submodule init 2>actual && +	test_i18ngrep "No url found for submodule path" actual +' + +test_expect_success 'submodule update aborts on missing .gitmodules file' ' +	test_when_finished "git update-index --remove sub" && +	git update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub && +	# missing the .gitmodules file here +	git submodule update sub 2>actual && +	test_i18ngrep "Submodule path .sub. not initialized" actual +' +  test_expect_success 'configuration parsing' '  	test_when_finished "rm -f .gitmodules" &&  	cat >.gitmodules <<-\EOF && @@ -462,7 +482,7 @@ test_expect_success 'update --init' '  	git config --remove-section submodule.example &&  	test_must_fail git config submodule.example.url && -	git submodule update init > update.out && +	git submodule update init 2> update.out &&  	cat update.out &&  	test_i18ngrep "not initialized" update.out &&  	test_must_fail git rev-parse --resolve-git-dir init/.git && @@ -480,7 +500,7 @@ test_expect_success 'update --init from subdirectory' '  	mkdir -p sub &&  	(  		cd sub && -		git submodule update ../init >update.out && +		git submodule update ../init 2>update.out &&  		cat update.out &&  		test_i18ngrep "not initialized" update.out &&  		test_must_fail git rev-parse --resolve-git-dir ../init/.git && @@ -818,6 +838,47 @@ test_expect_success 'submodule add --name allows to replace a submodule with ano  	)  ' +test_expect_success 'recursive relative submodules stay relative' ' +	test_when_finished "rm -rf super clone2 subsub sub3" && +	mkdir subsub && +	( +		cd subsub && +		git init && +		>t && +		git add t && +		git commit -m "initial commit" +	) && +	mkdir sub3 && +	( +		cd sub3 && +		git init && +		>t && +		git add t && +		git commit -m "initial commit" && +		git submodule add ../subsub dirdir/subsub && +		git commit -m "add submodule subsub" +	) && +	mkdir super && +	( +		cd super && +		git init && +		>t && +		git add t && +		git commit -m "initial commit" && +		git submodule add ../sub3 && +		git commit -m "add submodule sub" +	) && +	git clone super clone2 && +	( +		cd clone2 && +		git submodule update --init --recursive && +		echo "gitdir: ../.git/modules/sub3" >./sub3/.git_expect && +		echo "gitdir: ../../../.git/modules/sub3/modules/dirdir/subsub" >./sub3/dirdir/subsub/.git_expect +	) && +	test_cmp clone2/sub3/.git_expect clone2/sub3/.git && +	test_cmp clone2/sub3/dirdir/subsub/.git_expect clone2/sub3/dirdir/subsub/.git +' +  test_expect_success 'submodule add with an existing name fails unless forced' '  	(  		cd addtest2 && @@ -849,6 +910,20 @@ test_expect_success 'set up a second submodule' '  	git commit -m "submodule example2 added"  ' +test_expect_success 'submodule deinit works on repository without submodules' ' +	test_when_finished "rm -rf newdirectory" && +	mkdir newdirectory && +	( +		cd newdirectory && +		git init && +		>file && +		git add file && +		git commit -m "repo should not be empty" && +		git submodule deinit . && +		git submodule deinit --all +	) +' +  test_expect_success 'submodule deinit should remove the whole submodule section from .git/config' '  	git config submodule.example.foo bar &&  	git config submodule.example2.frotz nitfol && @@ -867,7 +942,7 @@ test_expect_success 'submodule deinit from subdirectory' '  		cd sub &&  		git submodule deinit ../init >../output  	) && -	grep "\\.\\./init" output && +	test_i18ngrep "\\.\\./init" output &&  	test -z "$(git config --get-regexp "submodule\.example\.")" &&  	test -n "$(git config --get-regexp "submodule\.example2\.")" &&  	test -f example2/.git && @@ -887,6 +962,19 @@ test_expect_success 'submodule deinit . deinits all initialized submodules' '  	rmdir init example2  ' +test_expect_success 'submodule deinit --all deinits all initialized submodules' ' +	git submodule update --init && +	git config submodule.example.foo bar && +	git config submodule.example2.frotz nitfol && +	test_must_fail git submodule deinit && +	git submodule deinit --all >actual && +	test -z "$(git config --get-regexp "submodule\.example\.")" && +	test -z "$(git config --get-regexp "submodule\.example2\.")" && +	test_i18ngrep "Cleared directory .init" actual && +	test_i18ngrep "Cleared directory .example2" actual && +	rmdir init example2 +' +  test_expect_success 'submodule deinit deinits a submodule when its work tree is missing or empty' '  	git submodule update --init &&  	rm -rf init example2/* example2/.git && @@ -953,6 +1041,10 @@ test_expect_success 'submodule deinit is silent when used on an uninitialized su  	test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&  	test_i18ngrep ! "Submodule .example2. (.*) unregistered for path .example2" actual &&  	test_i18ngrep "Cleared directory .init" actual && +	git submodule deinit --all >actual && +	test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual && +	test_i18ngrep ! "Submodule .example2. (.*) unregistered for path .example2" actual && +	test_i18ngrep "Cleared directory .init" actual &&  	rmdir init example2  ' @@ -999,5 +1091,30 @@ test_expect_success 'submodule add clone shallow submodule' '  	)  ' +test_expect_success 'submodule helper list is not confused by common prefixes' ' +	mkdir -p dir1/b && +	( +		cd dir1/b && +		git init && +		echo hi >testfile2 && +		git add . && +		git commit -m "test1" +	) && +	mkdir -p dir2/b && +	( +		cd dir2/b && +		git init && +		echo hello >testfile1 && +		git add .  && +		git commit -m "test2" +	) && +	git submodule add /dir1/b dir1/b && +	git submodule add /dir2/b dir2/b && +	git commit -m "first submodule commit" && +	git submodule--helper list dir1/b |cut -c51- >actual && +	echo "dir1/b" >expect && +	test_cmp expect actual +' +  test_done  | 
