| #!/bin/sh | |
| test_description='checkout can handle submodules' | |
| . ./test-lib.sh | |
| . "$TEST_DIRECTORY"/lib-submodule-update.sh | |
| test_expect_success 'setup' ' | |
| mkdir submodule && | |
| (cd submodule && | |
| git init && | |
| test_commit first) && | |
| git add submodule && | |
| test_tick && | |
| git commit -m superproject && | |
| (cd submodule && | |
| test_commit second) && | |
| git add submodule && | |
| test_tick && | |
| git commit -m updated.superproject | |
| ' | |
| test_expect_success '"reset <submodule>" updates the index' ' | |
| git update-index --refresh && | |
| git diff-files --quiet && | |
| git diff-index --quiet --cached HEAD && | |
| git reset HEAD^ submodule && | |
| test_must_fail git diff-files --quiet && | |
| git reset submodule && | |
| git diff-files --quiet | |
| ' | |
| test_expect_success '"checkout <submodule>" updates the index only' ' | |
| git update-index --refresh && | |
| git diff-files --quiet && | |
| git diff-index --quiet --cached HEAD && | |
| git checkout HEAD^ submodule && | |
| test_must_fail git diff-files --quiet && | |
| git checkout HEAD submodule && | |
| git diff-files --quiet | |
| ' | |
| test_expect_success '"checkout <submodule>" honors diff.ignoreSubmodules' ' | |
| git config diff.ignoreSubmodules dirty && | |
| echo x> submodule/untracked && | |
| git checkout HEAD >actual 2>&1 && | |
| test_must_be_empty actual | |
| ' | |
| test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .gitmodules' ' | |
| git config diff.ignoreSubmodules none && | |
| git config -f .gitmodules submodule.submodule.path submodule && | |
| git config -f .gitmodules submodule.submodule.ignore untracked && | |
| git checkout HEAD >actual 2>&1 && | |
| test_must_be_empty actual | |
| ' | |
| test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .git/config' ' | |
| git config -f .gitmodules submodule.submodule.ignore none && | |
| git config submodule.submodule.path submodule && | |
| git config submodule.submodule.ignore all && | |
| git checkout HEAD >actual 2>&1 && | |
| test_must_be_empty actual | |
| ' | |
| KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1 | |
| test_submodule_switch_recursing_with_args "checkout" | |
| test_submodule_forced_switch_recursing_with_args "checkout -f" | |
| test_submodule_switch "checkout" | |
| test_submodule_forced_switch "checkout -f" | |
| test_done |