@@ -75,4 +75,89 @@ test_run_rebase success -m
7575test_run_rebase success -i
7676test_run_rebase success -p
7777
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+
78163test_done
0 commit comments