add tests for rebasing with patch-equivalence present
[git/jrn.git] / t / t3421-rebase-topology-linear.sh
blobddcbfc67246c886d6efba0c35bd4bcfe044e2006
1 #!/bin/sh
3 test_description='basic rebase topology tests'
4 . ./test-lib.sh
5 . "$TEST_DIRECTORY"/lib-rebase.sh
7 # a---b---c
8 # \
9 # d---e
10 test_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
19 test_run_rebase () {
20 result=$1
21 shift
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..
29 test_run_rebase success ''
30 test_run_rebase success -m
31 test_run_rebase success -i
32 test_run_rebase success -p
34 test_run_rebase () {
35 result=$1
36 shift
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
43 test_run_rebase success ''
44 test_run_rebase success -m
45 test_run_rebase success -i
46 test_run_rebase success -p
48 test_run_rebase () {
49 result=$1
50 shift
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..
59 test_run_rebase success ''
60 test_run_rebase success -m
61 test_run_rebase success -i
62 test_run_rebase failure -p
64 test_run_rebase () {
65 result=$1
66 shift
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
73 test_run_rebase success ''
74 test_run_rebase success -m
75 test_run_rebase success -i
76 test_run_rebase success -p
78 # f
79 # /
80 # a---b---c---g---h
81 # \
82 # d---G---i
84 # uppercase = cherry-picked
85 # h = reverted g
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.
92 test_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
103 test_run_rebase () {
104 result=$1
105 shift
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..
113 test_run_rebase success ''
114 test_run_rebase failure -m
115 test_run_rebase success -i
116 test_run_rebase success -p
118 test_run_rebase () {
119 result=$1
120 shift
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..
128 test_run_rebase success ''
129 test_run_rebase failure -m
130 test_run_rebase success -i
131 test_run_rebase success -p
133 test_run_rebase () {
134 result=$1
135 shift
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..
143 test_run_rebase success ''
144 test_run_rebase failure -m
145 test_run_rebase success -i
146 test_run_rebase success -p
148 test_run_rebase () {
149 result=$1
150 shift
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..
158 test_run_rebase success ''
159 test_run_rebase success -m
160 test_run_rebase success -i
161 test_run_rebase success -p
163 test_done