add tests for rebasing root

Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Martin von Zweigbergk committed Jun 6, 2013 at 23:11 UTC 6a6bc5bdc4d73d0926bdbd8b65c8959583ba7911
1 file changed +129
t/t3421-rebase-topology-linear.sh
+129
@@ -218,4 +218,133 @@ test_run_rebase failure -m
218 test_run_rebase failure -i
219 test_run_rebase failure -p
220
221 +# m
222 +# /
223 +# a---b---c---g
224 +#
225 +# x---y---B
226 +#
227 +# uppercase = cherry-picked
228 +# m = reverted b
229 +#
230 +# Reverted patches are there for tests to be able to check if a commit
231 +# that introduced the same change as another commit is
232 +# dropped. Without reverted commits, we could get false positives
233 +# because applying the patch succeeds, but simply results in no
234 +# changes.
235 +test_expect_success 'setup of linear history for test involving root' '
236 + git checkout b &&
237 + revert m b &&
238 + git checkout --orphan disjoint &&
239 + git rm -rf . &&
240 + test_commit x &&
241 + test_commit y &&
242 + cherry_pick B b
243 +'
244 +
245 +test_run_rebase () {
246 + result=$1
247 + shift
248 + test_expect_$result "rebase $* --onto --root" "
249 + reset_rebase &&
250 + git rebase $* --onto c --root y &&
251 + test_cmp_rev c HEAD~2 &&
252 + test_linear_range 'x y' c..
253 + "
254 +}
255 +test_run_rebase success ''
256 +test_run_rebase failure -m
257 +test_run_rebase success -i
258 +test_run_rebase success -p
259 +
260 +test_run_rebase () {
261 + result=$1
262 + shift
263 + test_expect_$result "rebase $* without --onto --root with disjoint history" "
264 + reset_rebase &&
265 + git rebase $* c y &&
266 + test_cmp_rev c HEAD~2 &&
267 + test_linear_range 'x y' c..
268 + "
269 +}
270 +test_run_rebase success ''
271 +test_run_rebase failure -m
272 +test_run_rebase success -i
273 +test_run_rebase failure -p
274 +
275 +test_run_rebase () {
276 + result=$1
277 + shift
278 + test_expect_$result "rebase $* --onto --root drops patch in onto" "
279 + reset_rebase &&
280 + git rebase $* --onto m --root B &&
281 + test_cmp_rev m HEAD~2 &&
282 + test_linear_range 'x y' m..
283 + "
284 +}
285 +test_run_rebase success ''
286 +test_run_rebase failure -m
287 +test_run_rebase success -i
288 +test_run_rebase success -p
289 +
290 +test_run_rebase () {
291 + result=$1
292 + shift
293 + test_expect_$result "rebase $* --onto --root with merge-base does not go to root" "
294 + reset_rebase &&
295 + git rebase $* --onto m --root g &&
296 + test_cmp_rev m HEAD~2 &&
297 + test_linear_range 'c g' m..
298 + "
299 +}
300 +
301 +test_run_rebase success ''
302 +test_run_rebase success -m
303 +test_run_rebase success -i
304 +test_run_rebase failure -p
305 +
306 +test_run_rebase () {
307 + result=$1
308 + shift
309 + test_expect_$result "rebase $* without --onto --root with disjoint history drops patch in onto" "
310 + reset_rebase &&
311 + git rebase $* m B &&
312 + test_cmp_rev m HEAD~2 &&
313 + test_linear_range 'x y' m..
314 + "
315 +}
316 +test_run_rebase success ''
317 +test_run_rebase failure -m
318 +test_run_rebase success -i
319 +test_run_rebase failure -p
320 +
321 +test_run_rebase () {
322 + result=$1
323 + shift
324 + test_expect_$result "rebase $* --root on linear history is a no-op" "
325 + reset_rebase &&
326 + git rebase $* --root c &&
327 + test_cmp_rev c HEAD
328 + "
329 +}
330 +test_run_rebase failure ''
331 +test_run_rebase failure -m
332 +test_run_rebase failure -i
333 +test_run_rebase failure -p
334 +
335 +test_run_rebase () {
336 + result=$1
337 + shift
338 + test_expect_$result "rebase $* -f --root on linear history causes re-write" "
339 + reset_rebase &&
340 + git rebase $* -f --root c &&
341 + ! test_cmp_rev a HEAD~2 &&
342 + test_linear_range 'a b c' HEAD
343 + "
344 +}
345 +test_run_rebase success ''
346 +test_run_rebase success -m
347 +test_run_rebase success -i
348 +test_run_rebase success -p
349 +
350 test_done