#!/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