| #!/bin/sh | |
| test_description='stash can handle submodules' | |
| . ./test-lib.sh | |
| . "$TEST_DIRECTORY"/lib-submodule-update.sh | |
| git_stash () { | |
| git status -su >expect && | |
| ls -1pR * >>expect && | |
| may_only_be_test_must_fail "$2" && | |
| $2 git read-tree -u -m "$1" && | |
| if test -n "$2" | |
| then | |
| return | |
| fi && | |
| git stash && | |
| git status -su >actual && | |
| ls -1pR * >>actual && | |
| test_cmp expect actual && | |
| git stash apply | |
| } | |
| KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES=1 | |
| KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT=1 | |
| KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 | |
| test_submodule_switch_func "git_stash" | |
| setup_basic () { | |
| test_when_finished "rm -rf main sub" && | |
| git init sub && | |
| ( | |
| cd sub && | |
| test_commit sub_file | |
| ) && | |
| git init main && | |
| ( | |
| cd main && | |
| git -c protocol.file.allow=always submodule add ../sub && | |
| test_commit main_file | |
| ) | |
| } | |
| test_expect_success 'stash push with submodule.recurse=true preserves dirty submodule worktree' ' | |
| setup_basic && | |
| ( | |
| cd main && | |
| git config submodule.recurse true && | |
| echo "x" >main_file.t && | |
| echo "y" >sub/sub_file.t && | |
| git stash push && | |
| test_must_fail git -C sub diff --quiet | |
| ) | |
| ' | |
| test_expect_success 'stash push and pop with submodule.recurse=true preserves dirty submodule worktree' ' | |
| setup_basic && | |
| ( | |
| cd main && | |
| git config submodule.recurse true && | |
| echo "x" >main_file.t && | |
| echo "y" >sub/sub_file.t && | |
| git stash push && | |
| git stash pop && | |
| test_must_fail git -C sub diff --quiet | |
| ) | |
| ' | |
| test_done |