@@ -75,4 +75,89 @@ test_run_rebase success -m
75
75
test_run_rebase success -i
76
76
test_run_rebase success -p
77
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.
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
101
+ '
102
+
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..
111
+ "
112
+ }
113
+ test_run_rebase success ' '
114
+ test_run_rebase failure -m
115
+ test_run_rebase success -i
116
+ test_run_rebase success -p
117
+
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..
126
+ "
127
+ }
128
+ test_run_rebase success ' '
129
+ test_run_rebase failure -m
130
+ test_run_rebase success -i
131
+ test_run_rebase success -p
132
+
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..
141
+ "
142
+ }
143
+ test_run_rebase success ' '
144
+ test_run_rebase failure -m
145
+ test_run_rebase success -i
146
+ test_run_rebase success -p
147
+
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..
156
+ "
157
+ }
158
+ test_run_rebase success ' '
159
+ test_run_rebase success -m
160
+ test_run_rebase success -i
161
+ test_run_rebase success -p
162
+
78
163
test_done
0 commit comments