 ac7e57fa28
			
		
	
	ac7e57fa28
	
	
	
		
			
			To prepare for the default value of `protocol.file.allow` to change to "user", ensure tests that rely on local submodules can initialize them over the file protocol. Tests that only need to interact with submodules in a limited capacity have individual Git commands annotated with the appropriate configuration via `-c`. Tests that interact with submodules a handful of times use `test_config_global` instead. Test scripts that rely on submodules throughout use a `git config --global` during a setup test towards the beginning of the script. Signed-off-by: Taylor Blau <me@ttaylorr.com>
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) 2016 Jacob Keller, based on t4041 by Jens Lehmann
 | |
| #
 | |
| 
 | |
| test_description='Test for submodule diff on non-checked out submodule
 | |
| 
 | |
| This test tries to verify that add_submodule_odb works when the submodule was
 | |
| initialized previously but the checkout has since been removed.
 | |
| '
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| # Tested non-UTF-8 encoding
 | |
| test_encoding="ISO8859-1"
 | |
| 
 | |
| # String "added" in German (translated with Google Translate), encoded in UTF-8,
 | |
| # used in sample commit log messages in add_file() function below.
 | |
| added=$(printf "hinzugef\303\274gt")
 | |
| 
 | |
| add_file () {
 | |
| 	(
 | |
| 		cd "$1" &&
 | |
| 		shift &&
 | |
| 		for name
 | |
| 		do
 | |
| 			echo "$name" >"$name" &&
 | |
| 			git add "$name" &&
 | |
| 			test_tick &&
 | |
| 			# "git commit -m" would break MinGW, as Windows refuse to pass
 | |
| 			# $test_encoding encoded parameter to git.
 | |
| 			echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding |
 | |
| 			git -c "i18n.commitEncoding=$test_encoding" commit -F -
 | |
| 		done >/dev/null &&
 | |
| 		git rev-parse --short --verify HEAD
 | |
| 	)
 | |
| }
 | |
| 
 | |
| commit_file () {
 | |
| 	test_tick &&
 | |
| 	git commit "$@" -m "Commit $*" >/dev/null
 | |
| }
 | |
| 
 | |
| test_expect_success 'setup - submodules' '
 | |
| 	test_create_repo sm2 &&
 | |
| 	add_file . foo &&
 | |
| 	add_file sm2 foo1 foo2 &&
 | |
| 	smhead1=$(git -C sm2 rev-parse --short --verify HEAD)
 | |
| '
 | |
| 
 | |
| test_expect_success 'setup - git submodule add' '
 | |
| 	git -c protocol.file.allow=always submodule add ./sm2 sm1 &&
 | |
| 	commit_file sm1 .gitmodules &&
 | |
| 	git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm1 0000000...$smhead1 (new submodule)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'submodule directory removed' '
 | |
| 	rm -rf sm1 &&
 | |
| 	git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm1 0000000...$smhead1 (new submodule)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'setup - submodule multiple commits' '
 | |
| 	git submodule update --checkout sm1 &&
 | |
| 	smhead2=$(add_file sm1 foo3 foo4) &&
 | |
| 	commit_file sm1 &&
 | |
| 	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm1 $smhead1..$smhead2:
 | |
| 	  > Add foo4 ($added foo4)
 | |
| 	  > Add foo3 ($added foo3)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'submodule removed multiple commits' '
 | |
| 	rm -rf sm1 &&
 | |
| 	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm1 $smhead1..$smhead2:
 | |
| 	  > Add foo4 ($added foo4)
 | |
| 	  > Add foo3 ($added foo3)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'submodule not initialized in new clone' '
 | |
| 	git clone . sm3 &&
 | |
| 	git -C sm3 diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm1 $smhead1...$smhead2 (commits not present)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'setup submodule moved' '
 | |
| 	git submodule update --checkout sm1 &&
 | |
| 	git mv sm1 sm4 &&
 | |
| 	commit_file sm4 &&
 | |
| 	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm4 0000000...$smhead2 (new submodule)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'submodule moved then removed' '
 | |
| 	smhead3=$(add_file sm4 foo6 foo7) &&
 | |
| 	commit_file sm4 &&
 | |
| 	rm -rf sm4 &&
 | |
| 	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	Submodule sm4 $smhead2..$smhead3:
 | |
| 	  > Add foo7 ($added foo7)
 | |
| 	  > Add foo6 ($added foo6)
 | |
| 	EOF
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_done
 |