Merge branch 'ag/edit-todo-drop-check'
[git] / t / t3906-stash-submodule.sh
1 #!/bin/sh
2
3 test_description='stash can handle submodules'
4
5 . ./test-lib.sh
6 . "$TEST_DIRECTORY"/lib-submodule-update.sh
7
8 git_stash () {
9         git status -su >expect &&
10         ls -1pR * >>expect &&
11         git read-tree -u -m "$1" &&
12         git stash &&
13         git status -su >actual &&
14         ls -1pR * >>actual &&
15         test_cmp expect actual &&
16         git stash apply
17 }
18
19 KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES=1
20 KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT=1
21 KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
22 test_submodule_switch "git_stash"
23
24 setup_basic () {
25         test_when_finished "rm -rf main sub" &&
26         git init sub &&
27         (
28                 cd sub &&
29                 test_commit sub_file
30         ) &&
31         git init main &&
32         (
33                 cd main &&
34                 git submodule add ../sub &&
35                 test_commit main_file
36         )
37 }
38
39 test_expect_success 'stash push with submodule.recurse=true preserves dirty submodule worktree' '
40         setup_basic &&
41         (
42                 cd main &&
43                 git config submodule.recurse true &&
44                 echo "x" >main_file.t &&
45                 echo "y" >sub/sub_file.t &&
46                 git stash push &&
47                 test_must_fail git -C sub diff --quiet
48         )
49 '
50
51 test_expect_success 'stash push and pop with submodule.recurse=true preserves dirty submodule worktree' '
52         setup_basic &&
53         (
54                 cd main &&
55                 git config submodule.recurse true &&
56                 echo "x" >main_file.t &&
57                 echo "y" >sub/sub_file.t &&
58                 git stash push &&
59                 git stash pop &&
60                 test_must_fail git -C sub diff --quiet
61         )
62 '
63
64 test_done