1#!/bin/sh 2 3test_description='basic rebase topology tests' 4. ./test-lib.sh 5. "$TEST_DIRECTORY"/lib-rebase.sh 6 7# a---b---c 8# \ 9# d---e 10test_expect_success 'setup'' 11 test_commit a && 12 test_commit b && 13 test_commit c && 14 git checkout b && 15 test_commit d && 16 test_commit e 17' 18 19test_run_rebase () { 20 result=$1 21shift 22 test_expect_$result"simple rebase $*"" 23 reset_rebase && 24 git rebase $* c e && 25 test_cmp_rev c HEAD~2 && 26 test_linear_range 'd e' c.. 27 " 28} 29test_run_rebase success '' 30test_run_rebase success -m 31test_run_rebase success -i 32test_run_rebase success -p 33 34test_run_rebase () { 35 result=$1 36shift 37 test_expect_$result"rebase $* is no-op if upstream is an ancestor"" 38 reset_rebase && 39 git rebase $* b e && 40 test_cmp_rev e HEAD 41 " 42} 43test_run_rebase success '' 44test_run_rebase success -m 45test_run_rebase success -i 46test_run_rebase success -p 47 48test_run_rebase () { 49 result=$1 50shift 51 test_expect_$result"rebase $* -f rewrites even if upstream is an ancestor"" 52 reset_rebase && 53 git rebase $* -f b e && 54 ! test_cmp_rev e HEAD && 55 test_cmp_rev b HEAD~2 && 56 test_linear_range 'd e' b.. 57 " 58} 59test_run_rebase success '' 60test_run_rebase success -m 61test_run_rebase success -i 62test_run_rebase failure -p 63 64test_run_rebase () { 65 result=$1 66shift 67 test_expect_$result"rebase $* fast-forwards from ancestor of upstream"" 68 reset_rebase && 69 git rebase $* e b && 70 test_cmp_rev e HEAD 71 " 72} 73test_run_rebase success '' 74test_run_rebase success -m 75test_run_rebase success -i 76test_run_rebase success -p 77 78# f 79# / 80# a---b---c---g---h 81# \ 82# d---G---i 83# 84# uppercase = cherry-picked 85# h = reverted g 86# 87# Reverted patches are there for tests to be able to check if a commit 88# that introduced the same change as another commit is 89# dropped. Without reverted commits, we could get false positives 90# because applying the patch succeeds, but simply results in no 91# changes. 92test_expect_success 'setup of linear history for range selection tests'' 93 git checkout c && 94 test_commit g && 95 revert h g && 96 git checkout d && 97 cherry_pick G g && 98 test_commit i && 99 git checkout b && 100 test_commit f 101' 102 103test_run_rebase () { 104 result=$1 105shift 106 test_expect_$result"rebase $* drops patches in upstream"" 107 reset_rebase && 108 git rebase $* h i && 109 test_cmp_rev h HEAD~2 && 110 test_linear_range 'd i' h.. 111 " 112} 113test_run_rebase success '' 114test_run_rebase failure -m 115test_run_rebase success -i 116test_run_rebase success -p 117 118test_run_rebase () { 119 result=$1 120shift 121 test_expect_$result"rebase $* can drop last patch if in upstream"" 122 reset_rebase && 123 git rebase $* h G && 124 test_cmp_rev h HEAD^ && 125 test_linear_range 'd' h.. 126 " 127} 128test_run_rebase success '' 129test_run_rebase failure -m 130test_run_rebase success -i 131test_run_rebase success -p 132 133test_run_rebase () { 134 result=$1 135shift 136 test_expect_$result"rebase $* --onto drops patches in upstream"" 137 reset_rebase && 138 git rebase $* --onto f h i && 139 test_cmp_rev f HEAD~2 && 140 test_linear_range 'd i' f.. 141 " 142} 143test_run_rebase success '' 144test_run_rebase failure -m 145test_run_rebase success -i 146test_run_rebase success -p 147 148test_run_rebase () { 149 result=$1 150shift 151 test_expect_$result"rebase $* --onto does not drop patches in onto"" 152 reset_rebase && 153 git rebase $* --onto h f i && 154 test_cmp_rev h HEAD~3 && 155 test_linear_range 'd G i' h.. 156 " 157} 158test_run_rebase success '' 159test_run_rebase success -m 160test_run_rebase success -i 161test_run_rebase success -p 162 163test_done