]>
Commit | Line | Data |
---|---|---|
d5e673b6 EW |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2006 Eric Wong | |
4 | # | |
5 | ||
6 | test_description='git rebase --merge --skip tests' | |
7 | ||
8 | . ./test-lib.sh | |
9 | ||
2d05ef27 PW |
10 | . "$TEST_DIRECTORY"/lib-rebase.sh |
11 | ||
0cb0e143 | 12 | # we assume the default git am -3 --skip strategy is tested independently |
d5e673b6 EW |
13 | # and always works :) |
14 | ||
d5e673b6 EW |
15 | test_expect_success setup ' |
16 | echo hello > hello && | |
17 | git add hello && | |
18 | git commit -m "hello" && | |
19 | git branch skip-reference && | |
20 | ||
21 | echo world >> hello && | |
22 | git commit -a -m "hello world" && | |
23 | echo goodbye >> hello && | |
24 | git commit -a -m "goodbye" && | |
2d05ef27 PW |
25 | git tag goodbye && |
26 | ||
27 | git checkout --detach && | |
28 | git checkout HEAD^ . && | |
29 | test_tick && | |
30 | git commit -m reverted-goodbye && | |
31 | git tag reverted-goodbye && | |
21b11c6d PW |
32 | git checkout goodbye && |
33 | test_tick && | |
34 | GIT_AUTHOR_NAME="Another Author" \ | |
35 | GIT_AUTHOR_EMAIL="another.author@example.com" \ | |
36 | git commit --amend --no-edit -m amended-goodbye && | |
37 | test_tick && | |
38 | git tag amended-goodbye && | |
d5e673b6 EW |
39 | |
40 | git checkout -f skip-reference && | |
41 | echo moo > hello && | |
42 | git commit -a -m "we should skip this" && | |
43 | echo moo > cow && | |
44 | git add cow && | |
45 | git commit -m "this should not be skipped" && | |
46 | git branch pre-rebase skip-reference && | |
47 | git branch skip-merge skip-reference | |
48 | ' | |
49 | ||
41ac414e | 50 | test_expect_success 'rebase with git am -3 (default)' ' |
d492b31c | 51 | test_must_fail git rebase master |
4be60962 | 52 | ' |
d5e673b6 | 53 | |
95135b06 MZ |
54 | test_expect_success 'rebase --skip can not be used with other options' ' |
55 | test_must_fail git rebase -v --skip && | |
56 | test_must_fail git rebase --skip -v | |
57 | ' | |
58 | ||
d5e673b6 | 59 | test_expect_success 'rebase --skip with am -3' ' |
d5e673b6 EW |
60 | git rebase --skip |
61 | ' | |
3f735b66 JS |
62 | |
63 | test_expect_success 'rebase moves back to skip-reference' ' | |
64 | test refs/heads/skip-reference = $(git symbolic-ref HEAD) && | |
65 | git branch post-rebase && | |
66 | git reset --hard pre-rebase && | |
d492b31c | 67 | test_must_fail git rebase master && |
3f735b66 JS |
68 | echo "hello" > hello && |
69 | git add hello && | |
70 | git rebase --continue && | |
71 | test refs/heads/skip-reference = $(git symbolic-ref HEAD) && | |
72 | git reset --hard post-rebase | |
73 | ' | |
74 | ||
d5e673b6 EW |
75 | test_expect_success 'checkout skip-merge' 'git checkout -f skip-merge' |
76 | ||
d492b31c SB |
77 | test_expect_success 'rebase with --merge' ' |
78 | test_must_fail git rebase --merge master | |
79 | ' | |
d5e673b6 EW |
80 | |
81 | test_expect_success 'rebase --skip with --merge' ' | |
d5e673b6 | 82 | git rebase --skip |
15c7348e | 83 | ' |
d5e673b6 | 84 | |
15c7348e | 85 | test_expect_success 'merge and reference trees equal' ' |
c82ec45e | 86 | test -z "$(git diff-tree skip-merge skip-reference)" |
15c7348e | 87 | ' |
d5e673b6 | 88 | |
3f735b66 JS |
89 | test_expect_success 'moved back to branch correctly' ' |
90 | test refs/heads/skip-merge = $(git symbolic-ref HEAD) | |
91 | ' | |
92 | ||
d5e673b6 EW |
93 | test_debug 'gitk --all & sleep 1' |
94 | ||
21b11c6d PW |
95 | test_expect_success 'correct advice upon picking empty commit' ' |
96 | test_when_finished "git rebase --abort" && | |
97 | test_must_fail git rebase -i --onto goodbye \ | |
98 | amended-goodbye^ amended-goodbye 2>err && | |
99 | test_i18ngrep "previous cherry-pick is now empty" err && | |
430b75f7 | 100 | test_i18ngrep "git rebase --skip" err && |
21b11c6d | 101 | test_must_fail git commit && |
430b75f7 | 102 | test_i18ngrep "git rebase --skip" err |
21b11c6d PW |
103 | ' |
104 | ||
105 | test_expect_success 'correct authorship when committing empty pick' ' | |
106 | test_when_finished "git rebase --abort" && | |
107 | test_must_fail git rebase -i --onto goodbye \ | |
108 | amended-goodbye^ amended-goodbye && | |
109 | git commit --allow-empty && | |
110 | git log --pretty=format:"%an <%ae>%n%ad%B" -1 amended-goodbye >expect && | |
111 | git log --pretty=format:"%an <%ae>%n%ad%B" -1 HEAD >actual && | |
112 | test_cmp expect actual | |
113 | ' | |
114 | ||
115 | test_expect_success 'correct advice upon rewording empty commit' ' | |
116 | test_when_finished "git rebase --abort" && | |
117 | ( | |
118 | set_fake_editor && | |
119 | test_must_fail env FAKE_LINES="reword 1" git rebase -i \ | |
120 | --onto goodbye amended-goodbye^ amended-goodbye 2>err | |
121 | ) && | |
122 | test_i18ngrep "previous cherry-pick is now empty" err && | |
430b75f7 | 123 | test_i18ngrep "git rebase --skip" err && |
21b11c6d | 124 | test_must_fail git commit && |
430b75f7 | 125 | test_i18ngrep "git rebase --skip" err |
21b11c6d PW |
126 | ' |
127 | ||
128 | test_expect_success 'correct advice upon editing empty commit' ' | |
129 | test_when_finished "git rebase --abort" && | |
130 | ( | |
131 | set_fake_editor && | |
132 | test_must_fail env FAKE_LINES="edit 1" git rebase -i \ | |
133 | --onto goodbye amended-goodbye^ amended-goodbye 2>err | |
134 | ) && | |
135 | test_i18ngrep "previous cherry-pick is now empty" err && | |
430b75f7 | 136 | test_i18ngrep "git rebase --skip" err && |
21b11c6d | 137 | test_must_fail git commit && |
430b75f7 PW |
138 | test_i18ngrep "git rebase --skip" err |
139 | ' | |
140 | ||
141 | test_expect_success 'correct advice upon cherry-picking an empty commit during a rebase' ' | |
142 | test_when_finished "git rebase --abort" && | |
143 | ( | |
144 | set_fake_editor && | |
145 | test_must_fail env FAKE_LINES="1 exec_git_cherry-pick_amended-goodbye" \ | |
146 | git rebase -i goodbye^ goodbye 2>err | |
147 | ) && | |
148 | test_i18ngrep "previous cherry-pick is now empty" err && | |
149 | test_i18ngrep "git cherry-pick --skip" err && | |
150 | test_must_fail git commit 2>err && | |
151 | test_i18ngrep "git cherry-pick --skip" err | |
152 | ' | |
153 | ||
154 | test_expect_success 'correct advice upon multi cherry-pick picking an empty commit during a rebase' ' | |
155 | test_when_finished "git rebase --abort" && | |
156 | ( | |
157 | set_fake_editor && | |
158 | test_must_fail env FAKE_LINES="1 exec_git_cherry-pick_goodbye_amended-goodbye" \ | |
159 | git rebase -i goodbye^^ goodbye 2>err | |
160 | ) && | |
161 | test_i18ngrep "previous cherry-pick is now empty" err && | |
162 | test_i18ngrep "git cherry-pick --skip" err && | |
163 | test_must_fail git commit 2>err && | |
21b11c6d PW |
164 | test_i18ngrep "git cherry-pick --skip" err |
165 | ' | |
166 | ||
2d05ef27 PW |
167 | test_expect_success 'fixup that empties commit fails' ' |
168 | test_when_finished "git rebase --abort" && | |
169 | ( | |
170 | set_fake_editor && | |
171 | test_must_fail env FAKE_LINES="1 fixup 2" git rebase -i \ | |
172 | goodbye^ reverted-goodbye | |
173 | ) | |
174 | ' | |
175 | ||
176 | test_expect_success 'squash that empties commit fails' ' | |
177 | test_when_finished "git rebase --abort" && | |
178 | ( | |
179 | set_fake_editor && | |
180 | test_must_fail env FAKE_LINES="1 squash 2" git rebase -i \ | |
181 | goodbye^ reverted-goodbye | |
182 | ) | |
183 | ' | |
184 | ||
185 | # Must be the last test in this file | |
186 | test_expect_success '$EDITOR and friends are unchanged' ' | |
187 | test_editor_unchanged | |
188 | ' | |
189 | ||
d5e673b6 | 190 | test_done |