| #!/bin/sh | 
 |  | 
 | test_description='git am handling submodules' | 
 |  | 
 | . ./test-lib.sh | 
 | . "$TEST_DIRECTORY"/lib-submodule-update.sh | 
 |  | 
 | am () { | 
 | 	git format-patch --stdout --ignore-submodules=dirty "..$1" | git am - | 
 | } | 
 |  | 
 | test_submodule_switch "am" | 
 |  | 
 | am_3way () { | 
 | 	git format-patch --stdout --ignore-submodules=dirty "..$1" | git am --3way - | 
 | } | 
 |  | 
 | KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 | 
 | test_submodule_switch "am_3way" | 
 |  | 
 | test_expect_success 'setup diff.submodule' ' | 
 | 	test_commit one && | 
 | 	INITIAL=$(git rev-parse HEAD) && | 
 |  | 
 | 	git init submodule && | 
 | 	( | 
 | 		cd submodule && | 
 | 		test_commit two && | 
 | 		git rev-parse HEAD >../initial-submodule | 
 | 	) && | 
 | 	git submodule add ./submodule && | 
 | 	git commit -m first && | 
 |  | 
 | 	( | 
 | 		cd submodule && | 
 | 		test_commit three && | 
 | 		git rev-parse HEAD >../first-submodule | 
 | 	) && | 
 | 	git add submodule && | 
 | 	git commit -m second && | 
 | 	SECOND=$(git rev-parse HEAD) && | 
 |  | 
 | 	( | 
 | 		cd submodule && | 
 | 		git mv two.t four.t && | 
 | 		git commit -m "second submodule" && | 
 | 		git rev-parse HEAD >../second-submodule | 
 | 	) && | 
 | 	test_commit four && | 
 | 	git add submodule && | 
 | 	git commit --amend --no-edit && | 
 | 	THIRD=$(git rev-parse HEAD) && | 
 | 	git submodule update --init | 
 | ' | 
 |  | 
 | run_test() { | 
 | 	START_COMMIT=$1 && | 
 | 	EXPECT=$2 && | 
 | 	# Abort any merges in progress: the previous | 
 | 	# test may have failed, and we should clean up. | 
 | 	test_might_fail git am --abort && | 
 | 	git reset --hard $START_COMMIT && | 
 | 	rm -f *.patch && | 
 | 	git format-patch -1 && | 
 | 	git reset --hard $START_COMMIT^ && | 
 | 	git submodule update && | 
 | 	git am *.patch && | 
 | 	git submodule update && | 
 | 	git -C submodule rev-parse HEAD >actual && | 
 | 	test_cmp $EXPECT actual | 
 | } | 
 |  | 
 | test_expect_success 'diff.submodule unset' ' | 
 | 	test_unconfig diff.submodule && | 
 | 	run_test $SECOND first-submodule | 
 | ' | 
 |  | 
 | test_expect_success 'diff.submodule unset with extra file' ' | 
 | 	test_unconfig diff.submodule && | 
 | 	run_test $THIRD second-submodule | 
 | ' | 
 |  | 
 | test_expect_success 'diff.submodule=log' ' | 
 | 	test_config diff.submodule log && | 
 | 	run_test $SECOND first-submodule | 
 | ' | 
 |  | 
 | test_expect_success 'diff.submodule=log with extra file' ' | 
 | 	test_config diff.submodule log && | 
 | 	run_test $THIRD second-submodule | 
 | ' | 
 |  | 
 | test_done |