@@ -218,4 +218,133 @@ test_run_rebase failure -m
218
218
test_run_rebase failure -i
219
219
test_run_rebase failure -p
220
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
+
221
350
test_done
0 commit comments