]>
Commit | Line | Data |
---|---|---|
6848d58c JS |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2008 Johannes Schindelin | |
4 | # | |
5 | ||
4ae6d469 | 6 | test_description='Test rebasing, stashing, etc. with submodules' |
6848d58c JS |
7 | |
8 | . ./test-lib.sh | |
9 | ||
10 | test_expect_success setup ' | |
11 | ||
12 | echo file > file && | |
13 | git add file && | |
14 | test_tick && | |
15 | git commit -m initial && | |
16 | git clone . submodule && | |
17 | git add submodule && | |
18 | test_tick && | |
19 | git commit -m submodule && | |
20 | echo second line >> file && | |
21 | (cd submodule && git pull) && | |
22 | test_tick && | |
4ae6d469 JH |
23 | git commit -m file-and-submodule -a && |
24 | git branch added-submodule | |
6848d58c JS |
25 | |
26 | ' | |
27 | ||
28 | test_expect_success 'rebase with a dirty submodule' ' | |
29 | ||
30 | (cd submodule && | |
31 | echo 3rd line >> file && | |
32 | test_tick && | |
33 | git commit -m fork -a) && | |
34 | echo unrelated >> file2 && | |
35 | git add file2 && | |
36 | test_tick && | |
37 | git commit -m unrelated file2 && | |
38 | echo other line >> file && | |
39 | test_tick && | |
40 | git commit -m update file && | |
41 | CURRENT=$(cd submodule && git rev-parse HEAD) && | |
42 | EXPECTED=$(git rev-parse HEAD~2:submodule) && | |
43 | GIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ && | |
44 | STORED=$(git rev-parse HEAD:submodule) && | |
45 | test $EXPECTED = $STORED && | |
46 | test $CURRENT = $(cd submodule && git rev-parse HEAD) | |
47 | ||
48 | ' | |
49 | ||
50 | cat > fake-editor.sh << \EOF | |
51 | #!/bin/sh | |
52 | echo $EDITOR_TEXT | |
53 | EOF | |
54 | chmod a+x fake-editor.sh | |
55 | ||
56 | test_expect_success 'interactive rebase with a dirty submodule' ' | |
57 | ||
58 | test submodule = $(git diff --name-only) && | |
59 | HEAD=$(git rev-parse HEAD) && | |
60 | GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \ | |
61 | git rebase -i HEAD^ && | |
62 | test submodule = $(git diff --name-only) | |
63 | ||
64 | ' | |
65 | ||
66 | test_expect_success 'rebase with dirty file and submodule fails' ' | |
67 | ||
68 | echo yet another line >> file && | |
69 | test_tick && | |
70 | git commit -m next file && | |
71 | echo rewrite > file && | |
72 | test_tick && | |
73 | git commit -m rewrite file && | |
74 | echo dirty > file && | |
d492b31c | 75 | test_must_fail git rebase --onto HEAD~2 HEAD^ |
6848d58c JS |
76 | |
77 | ' | |
78 | ||
79 | test_expect_success 'stash with a dirty submodule' ' | |
80 | ||
81 | echo new > file && | |
82 | CURRENT=$(cd submodule && git rev-parse HEAD) && | |
83 | git stash && | |
84 | test new != $(cat file) && | |
85 | test submodule = $(git diff --name-only) && | |
86 | test $CURRENT = $(cd submodule && git rev-parse HEAD) && | |
87 | git stash apply && | |
88 | test new = $(cat file) && | |
89 | test $CURRENT = $(cd submodule && git rev-parse HEAD) | |
90 | ||
91 | ' | |
92 | ||
4ae6d469 JH |
93 | test_expect_success 'rebasing submodule that should conflict' ' |
94 | git reset --hard && | |
95 | git checkout added-submodule && | |
96 | git add submodule && | |
97 | test_tick && | |
98 | git commit -m third && | |
99 | ( | |
100 | cd submodule && | |
101 | git commit --allow-empty -m extra | |
102 | ) && | |
103 | git add submodule && | |
104 | test_tick && | |
105 | git commit -m fourth && | |
106 | ||
107 | test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 && | |
108 | git ls-files -s submodule >actual && | |
109 | ( | |
110 | cd submodule && | |
111 | echo "160000 $(git rev-parse HEAD^) 1 submodule" && | |
112 | echo "160000 $(git rev-parse HEAD^^) 2 submodule" && | |
113 | echo "160000 $(git rev-parse HEAD) 3 submodule" | |
114 | ) >expect && | |
115 | test_cmp expect actual | |
116 | ' | |
117 | ||
6848d58c | 118 | test_done |