3 818c7501 2019-07-11 stsp # Copyright (c) 2019 Stefan Sperling <stsp@openbsd.org>
5 818c7501 2019-07-11 stsp # Permission to use, copy, modify, and distribute this software for any
6 818c7501 2019-07-11 stsp # purpose with or without fee is hereby granted, provided that the above
7 818c7501 2019-07-11 stsp # copyright notice and this permission notice appear in all copies.
9 818c7501 2019-07-11 stsp # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 818c7501 2019-07-11 stsp # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 818c7501 2019-07-11 stsp # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 818c7501 2019-07-11 stsp # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 818c7501 2019-07-11 stsp # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 818c7501 2019-07-11 stsp # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 818c7501 2019-07-11 stsp # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 818c7501 2019-07-11 stsp . ./common.sh
19 818c7501 2019-07-11 stsp function test_rebase_basic {
20 818c7501 2019-07-11 stsp local testroot=`test_init rebase_basic`
22 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
23 818c7501 2019-07-11 stsp echo "modified delta on branch" > $testroot/repo/gamma/delta
24 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to delta on newbranch"
26 818c7501 2019-07-11 stsp echo "modified alpha on branch" > $testroot/repo/alpha
27 818c7501 2019-07-11 stsp (cd $testroot/repo && git rm -q beta)
28 818c7501 2019-07-11 stsp echo "new file on branch" > $testroot/repo/epsilon/new
29 818c7501 2019-07-11 stsp (cd $testroot/repo && git add epsilon/new)
30 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing more changes on newbranch"
32 818c7501 2019-07-11 stsp local orig_commit1=`git_show_parent_commit $testroot/repo`
33 818c7501 2019-07-11 stsp local orig_commit2=`git_show_head $testroot/repo`
35 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
36 818c7501 2019-07-11 stsp echo "modified zeta on master" > $testroot/repo/epsilon/zeta
37 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to zeta on master"
38 818c7501 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
40 818c7501 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
42 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
43 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
47 818c7501 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > $testroot/stdout)
49 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q newbranch)
50 818c7501 2019-07-11 stsp local new_commit1=`git_show_parent_commit $testroot/repo`
51 818c7501 2019-07-11 stsp local new_commit2=`git_show_head $testroot/repo`
53 818c7501 2019-07-11 stsp local short_orig_commit1=`trim_obj_id 28 $orig_commit1`
54 818c7501 2019-07-11 stsp local short_orig_commit2=`trim_obj_id 28 $orig_commit2`
55 818c7501 2019-07-11 stsp local short_new_commit1=`trim_obj_id 28 $new_commit1`
56 818c7501 2019-07-11 stsp local short_new_commit2=`trim_obj_id 28 $new_commit2`
58 818c7501 2019-07-11 stsp echo "G gamma/delta" >> $testroot/stdout.expected
59 818c7501 2019-07-11 stsp echo -n "$short_orig_commit1 -> $short_new_commit1" \
60 818c7501 2019-07-11 stsp >> $testroot/stdout.expected
61 818c7501 2019-07-11 stsp echo ": committing to delta on newbranch" >> $testroot/stdout.expected
62 818c7501 2019-07-11 stsp echo "G alpha" >> $testroot/stdout.expected
63 818c7501 2019-07-11 stsp echo "D beta" >> $testroot/stdout.expected
64 818c7501 2019-07-11 stsp echo "A epsilon/new" >> $testroot/stdout.expected
65 818c7501 2019-07-11 stsp echo -n "$short_orig_commit2 -> $short_new_commit2" \
66 818c7501 2019-07-11 stsp >> $testroot/stdout.expected
67 818c7501 2019-07-11 stsp echo ": committing more changes on newbranch" \
68 818c7501 2019-07-11 stsp >> $testroot/stdout.expected
69 818c7501 2019-07-11 stsp echo "Switching work tree to refs/heads/newbranch" \
70 818c7501 2019-07-11 stsp >> $testroot/stdout.expected
72 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
74 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
75 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
76 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
80 818c7501 2019-07-11 stsp echo "modified delta on branch" > $testroot/content.expected
81 818c7501 2019-07-11 stsp cat $testroot/wt/gamma/delta > $testroot/content
82 818c7501 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
84 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
85 818c7501 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
86 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
90 818c7501 2019-07-11 stsp echo "modified alpha on branch" > $testroot/content.expected
91 818c7501 2019-07-11 stsp cat $testroot/wt/alpha > $testroot/content
92 818c7501 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
94 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
95 818c7501 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
96 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
100 818c7501 2019-07-11 stsp if [ -e $testroot/wt/beta ]; then
101 818c7501 2019-07-11 stsp echo "removed file beta still exists on disk" >&2
102 818c7501 2019-07-11 stsp test_done "$testroot" "1"
106 818c7501 2019-07-11 stsp echo "new file on branch" > $testroot/content.expected
107 818c7501 2019-07-11 stsp cat $testroot/wt/epsilon/new > $testroot/content
108 818c7501 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
110 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
111 818c7501 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
112 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
116 818c7501 2019-07-11 stsp (cd $testroot/wt && got status > $testroot/stdout)
118 818c7501 2019-07-11 stsp echo -n > $testroot/stdout.expected
119 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
121 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
122 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
123 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
127 818c7501 2019-07-11 stsp (cd $testroot/wt && got log -l3 | grep ^commit > $testroot/stdout)
128 818c7501 2019-07-11 stsp echo "commit $new_commit2 (newbranch)" > $testroot/stdout.expected
129 818c7501 2019-07-11 stsp echo "commit $new_commit1" >> $testroot/stdout.expected
130 818c7501 2019-07-11 stsp echo "commit $master_commit (master)" >> $testroot/stdout.expected
131 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
133 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
134 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
136 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
139 818c7501 2019-07-11 stsp function test_rebase_ancestry_check {
140 818c7501 2019-07-11 stsp local testroot=`test_init rebase_ancestry_check`
142 818c7501 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
144 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
145 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
149 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
150 818c7501 2019-07-11 stsp echo "modified delta on branch" > $testroot/repo/gamma/delta
151 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to delta on newbranch"
153 818c7501 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > $testroot/stdout \
154 818c7501 2019-07-11 stsp 2> $testroot/stderr)
156 818c7501 2019-07-11 stsp echo -n > $testroot/stdout.expected
157 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
159 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
160 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
161 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
165 818c7501 2019-07-11 stsp echo -n "got: specified branch resolves to a commit " \
166 818c7501 2019-07-11 stsp > $testroot/stderr.expected
167 818c7501 2019-07-11 stsp echo "which is already contained in work tree's branch" \
168 818c7501 2019-07-11 stsp >> $testroot/stderr.expected
169 818c7501 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
171 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
172 818c7501 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
174 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
177 818c7501 2019-07-11 stsp function test_rebase_continue {
178 818c7501 2019-07-11 stsp local testroot=`test_init rebase_continue`
180 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
181 818c7501 2019-07-11 stsp echo "modified alpha on branch" > $testroot/repo/alpha
182 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on newbranch"
183 818c7501 2019-07-11 stsp local orig_commit1=`git_show_head $testroot/repo`
185 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
186 818c7501 2019-07-11 stsp echo "modified alpha on master" > $testroot/repo/alpha
187 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on master"
188 818c7501 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
190 818c7501 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
192 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
193 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
197 818c7501 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > $testroot/stdout \
198 818c7501 2019-07-11 stsp 2> $testroot/stderr)
200 818c7501 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
201 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
203 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
204 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
205 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
209 11495e04 2019-07-12 stsp echo "got: conflicts must be resolved before rebasing can continue" \
210 818c7501 2019-07-11 stsp > $testroot/stderr.expected
211 818c7501 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
213 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
214 818c7501 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
215 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
219 818c7501 2019-07-11 stsp echo "<<<<<<< commit $orig_commit1" > $testroot/content.expected
220 818c7501 2019-07-11 stsp echo "modified alpha on branch" >> $testroot/content.expected
221 818c7501 2019-07-11 stsp echo "=======" >> $testroot/content.expected
222 818c7501 2019-07-11 stsp echo "modified alpha on master" >> $testroot/content.expected
223 818c7501 2019-07-11 stsp echo '>>>>>>> alpha' >> $testroot/content.expected
224 818c7501 2019-07-11 stsp cat $testroot/wt/alpha > $testroot/content
225 818c7501 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
227 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
228 818c7501 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
229 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
233 818c7501 2019-07-11 stsp (cd $testroot/wt && got status > $testroot/stdout)
235 818c7501 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
236 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
238 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
239 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
240 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
244 818c7501 2019-07-11 stsp # resolve the conflict
245 818c7501 2019-07-11 stsp echo "modified alpha on branch and master" > $testroot/wt/alpha
247 818c7501 2019-07-11 stsp (cd $testroot/wt && got rebase -c > $testroot/stdout)
249 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q newbranch)
250 818c7501 2019-07-11 stsp local new_commit1=`git_show_head $testroot/repo`
252 818c7501 2019-07-11 stsp local short_orig_commit1=`trim_obj_id 28 $orig_commit1`
253 818c7501 2019-07-11 stsp local short_new_commit1=`trim_obj_id 28 $new_commit1`
255 818c7501 2019-07-11 stsp echo -n "$short_orig_commit1 -> $short_new_commit1" \
256 818c7501 2019-07-11 stsp > $testroot/stdout.expected
257 818c7501 2019-07-11 stsp echo ": committing to alpha on newbranch" >> $testroot/stdout.expected
258 818c7501 2019-07-11 stsp echo "Switching work tree to refs/heads/newbranch" \
259 818c7501 2019-07-11 stsp >> $testroot/stdout.expected
261 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
263 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
264 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
265 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
270 818c7501 2019-07-11 stsp (cd $testroot/wt && got log -l2 | grep ^commit > $testroot/stdout)
271 818c7501 2019-07-11 stsp echo "commit $new_commit1 (newbranch)" > $testroot/stdout.expected
272 818c7501 2019-07-11 stsp echo "commit $master_commit (master)" >> $testroot/stdout.expected
273 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
275 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
276 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
278 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
281 818c7501 2019-07-11 stsp function test_rebase_abort {
282 818c7501 2019-07-11 stsp local testroot=`test_init rebase_abort`
284 818c7501 2019-07-11 stsp local init_commit=`git_show_head $testroot/repo`
286 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
287 818c7501 2019-07-11 stsp echo "modified alpha on branch" > $testroot/repo/alpha
288 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on newbranch"
289 818c7501 2019-07-11 stsp local orig_commit1=`git_show_head $testroot/repo`
291 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
292 818c7501 2019-07-11 stsp echo "modified alpha on master" > $testroot/repo/alpha
293 818c7501 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on master"
294 818c7501 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
296 818c7501 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
298 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
299 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
303 818c7501 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > $testroot/stdout \
304 818c7501 2019-07-11 stsp 2> $testroot/stderr)
306 818c7501 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
307 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
309 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
310 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
311 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
315 11495e04 2019-07-12 stsp echo "got: conflicts must be resolved before rebasing can continue" \
316 818c7501 2019-07-11 stsp > $testroot/stderr.expected
317 818c7501 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
319 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
320 818c7501 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
321 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
325 818c7501 2019-07-11 stsp echo "<<<<<<< commit $orig_commit1" > $testroot/content.expected
326 818c7501 2019-07-11 stsp echo "modified alpha on branch" >> $testroot/content.expected
327 818c7501 2019-07-11 stsp echo "=======" >> $testroot/content.expected
328 818c7501 2019-07-11 stsp echo "modified alpha on master" >> $testroot/content.expected
329 818c7501 2019-07-11 stsp echo '>>>>>>> alpha' >> $testroot/content.expected
330 818c7501 2019-07-11 stsp cat $testroot/wt/alpha > $testroot/content
331 818c7501 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
333 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
334 818c7501 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
335 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
339 818c7501 2019-07-11 stsp (cd $testroot/wt && got status > $testroot/stdout)
341 818c7501 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
342 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
344 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
345 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
346 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
350 818c7501 2019-07-11 stsp (cd $testroot/wt && got rebase -a > $testroot/stdout)
352 818c7501 2019-07-11 stsp (cd $testroot/repo && git checkout -q newbranch)
354 818c7501 2019-07-11 stsp echo "Switching work tree to refs/heads/master" \
355 818c7501 2019-07-11 stsp > $testroot/stdout.expected
356 818c7501 2019-07-11 stsp echo 'R alpha' >> $testroot/stdout.expected
357 818c7501 2019-07-11 stsp echo "Rebase of refs/heads/newbranch aborted" \
358 818c7501 2019-07-11 stsp >> $testroot/stdout.expected
360 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
362 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
363 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
364 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
368 818c7501 2019-07-11 stsp echo "modified alpha on master" > $testroot/content.expected
369 818c7501 2019-07-11 stsp cat $testroot/wt/alpha > $testroot/content
370 818c7501 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
372 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
373 818c7501 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
374 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
378 818c7501 2019-07-11 stsp (cd $testroot/wt && got log -l3 -c newbranch \
379 818c7501 2019-07-11 stsp | grep ^commit > $testroot/stdout)
380 818c7501 2019-07-11 stsp echo "commit $orig_commit1 (newbranch)" > $testroot/stdout.expected
381 818c7501 2019-07-11 stsp echo "commit $init_commit" >> $testroot/stdout.expected
382 818c7501 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
384 818c7501 2019-07-11 stsp if [ "$ret" != "0" ]; then
385 818c7501 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
387 818c7501 2019-07-11 stsp test_done "$testroot" "$ret"
390 ff0d2220 2019-07-11 stsp function test_rebase_no_op_change {
391 ff0d2220 2019-07-11 stsp local testroot=`test_init rebase_no_op_change`
392 ff0d2220 2019-07-11 stsp local init_commit=`git_show_head $testroot/repo`
394 ff0d2220 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
395 ff0d2220 2019-07-11 stsp echo "modified alpha on branch" > $testroot/repo/alpha
396 ff0d2220 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on newbranch"
397 ff0d2220 2019-07-11 stsp local orig_commit1=`git_show_head $testroot/repo`
399 ff0d2220 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
400 ff0d2220 2019-07-11 stsp echo "modified alpha on master" > $testroot/repo/alpha
401 ff0d2220 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on master"
402 ff0d2220 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
404 ff0d2220 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
406 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
407 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
411 ff0d2220 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > $testroot/stdout \
412 ff0d2220 2019-07-11 stsp 2> $testroot/stderr)
414 ff0d2220 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
415 ff0d2220 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
417 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
418 ff0d2220 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
419 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
423 11495e04 2019-07-12 stsp echo "got: conflicts must be resolved before rebasing can continue" \
424 ff0d2220 2019-07-11 stsp > $testroot/stderr.expected
425 ff0d2220 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
427 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
428 ff0d2220 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
429 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
433 ff0d2220 2019-07-11 stsp echo "<<<<<<< commit $orig_commit1" > $testroot/content.expected
434 ff0d2220 2019-07-11 stsp echo "modified alpha on branch" >> $testroot/content.expected
435 ff0d2220 2019-07-11 stsp echo "=======" >> $testroot/content.expected
436 ff0d2220 2019-07-11 stsp echo "modified alpha on master" >> $testroot/content.expected
437 ff0d2220 2019-07-11 stsp echo '>>>>>>> alpha' >> $testroot/content.expected
438 ff0d2220 2019-07-11 stsp cat $testroot/wt/alpha > $testroot/content
439 ff0d2220 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
441 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
442 ff0d2220 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
443 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
447 ff0d2220 2019-07-11 stsp (cd $testroot/wt && got status > $testroot/stdout)
449 ff0d2220 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
450 ff0d2220 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
452 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
453 ff0d2220 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
454 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
458 ff0d2220 2019-07-11 stsp # resolve the conflict
459 ff0d2220 2019-07-11 stsp echo "modified alpha on master" > $testroot/wt/alpha
461 ff0d2220 2019-07-11 stsp (cd $testroot/wt && got rebase -c > $testroot/stdout)
463 ff0d2220 2019-07-11 stsp (cd $testroot/repo && git checkout -q newbranch)
464 ff0d2220 2019-07-11 stsp local new_commit1=`git_show_head $testroot/repo`
466 ff0d2220 2019-07-11 stsp local short_orig_commit1=`trim_obj_id 28 $orig_commit1`
468 ff0d2220 2019-07-11 stsp echo -n "$short_orig_commit1 -> no-op change" \
469 ff0d2220 2019-07-11 stsp > $testroot/stdout.expected
470 ff0d2220 2019-07-11 stsp echo ": committing to alpha on newbranch" >> $testroot/stdout.expected
471 ff0d2220 2019-07-11 stsp echo "Switching work tree to refs/heads/newbranch" \
472 ff0d2220 2019-07-11 stsp >> $testroot/stdout.expected
474 ff0d2220 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
476 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
477 ff0d2220 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
478 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
483 ff0d2220 2019-07-11 stsp (cd $testroot/wt && got log -l2 | grep ^commit > $testroot/stdout)
484 ff0d2220 2019-07-11 stsp echo "commit $master_commit (master, newbranch)" \
485 ff0d2220 2019-07-11 stsp > $testroot/stdout.expected
486 ff0d2220 2019-07-11 stsp echo "commit $init_commit" >> $testroot/stdout.expected
487 7d5807f4 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
489 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
490 7d5807f4 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
492 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
495 7d5807f4 2019-07-11 stsp function test_rebase_in_progress {
496 4ba9c4f6 2019-07-11 stsp local testroot=`test_init rebase_in_progress`
497 7d5807f4 2019-07-11 stsp local init_commit=`git_show_head $testroot/repo`
499 7d5807f4 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
500 7d5807f4 2019-07-11 stsp echo "modified alpha on branch" > $testroot/repo/alpha
501 7d5807f4 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on newbranch"
502 7d5807f4 2019-07-11 stsp local orig_commit1=`git_show_head $testroot/repo`
504 7d5807f4 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
505 7d5807f4 2019-07-11 stsp echo "modified alpha on master" > $testroot/repo/alpha
506 7d5807f4 2019-07-11 stsp git_commit $testroot/repo -m "committing to alpha on master"
507 7d5807f4 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
509 7d5807f4 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
511 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
512 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
516 7d5807f4 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > $testroot/stdout \
517 7d5807f4 2019-07-11 stsp 2> $testroot/stderr)
519 7d5807f4 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
520 7d5807f4 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
522 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
523 7d5807f4 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
524 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
528 11495e04 2019-07-12 stsp echo "got: conflicts must be resolved before rebasing can continue" \
529 7d5807f4 2019-07-11 stsp > $testroot/stderr.expected
530 7d5807f4 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
532 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
533 7d5807f4 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
534 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
538 7d5807f4 2019-07-11 stsp echo "<<<<<<< commit $orig_commit1" > $testroot/content.expected
539 7d5807f4 2019-07-11 stsp echo "modified alpha on branch" >> $testroot/content.expected
540 7d5807f4 2019-07-11 stsp echo "=======" >> $testroot/content.expected
541 7d5807f4 2019-07-11 stsp echo "modified alpha on master" >> $testroot/content.expected
542 7d5807f4 2019-07-11 stsp echo '>>>>>>> alpha' >> $testroot/content.expected
543 7d5807f4 2019-07-11 stsp cat $testroot/wt/alpha > $testroot/content
544 7d5807f4 2019-07-11 stsp cmp -s $testroot/content.expected $testroot/content
546 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
547 7d5807f4 2019-07-11 stsp diff -u $testroot/content.expected $testroot/content
548 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
552 7d5807f4 2019-07-11 stsp (cd $testroot/wt && got status > $testroot/stdout)
554 7d5807f4 2019-07-11 stsp echo "C alpha" > $testroot/stdout.expected
555 ff0d2220 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
557 ff0d2220 2019-07-11 stsp if [ "$ret" != "0" ]; then
558 ff0d2220 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
559 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
563 7d5807f4 2019-07-11 stsp for cmd in update commit; do
564 7d5807f4 2019-07-11 stsp (cd $testroot/wt && got $cmd > $testroot/stdout \
565 7d5807f4 2019-07-11 stsp 2> $testroot/stderr)
567 7d5807f4 2019-07-11 stsp echo -n > $testroot/stdout.expected
568 7d5807f4 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
570 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
571 7d5807f4 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
572 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
576 7d5807f4 2019-07-11 stsp echo -n "got: a rebase operation is in progress in this " \
577 7d5807f4 2019-07-11 stsp > $testroot/stderr.expected
578 7d5807f4 2019-07-11 stsp echo "work tree and must be continued or aborted first" \
579 7d5807f4 2019-07-11 stsp >> $testroot/stderr.expected
580 7d5807f4 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
582 7d5807f4 2019-07-11 stsp if [ "$ret" != "0" ]; then
583 7d5807f4 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
584 7d5807f4 2019-07-11 stsp test_done "$testroot" "$ret"
589 64c6d990 2019-07-11 stsp test_done "$testroot" "$ret"
592 64c6d990 2019-07-11 stsp function test_rebase_path_prefix {
593 64c6d990 2019-07-11 stsp local testroot=`test_init rebase_path_prefix`
595 64c6d990 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
596 64c6d990 2019-07-11 stsp echo "modified delta on branch" > $testroot/repo/gamma/delta
597 64c6d990 2019-07-11 stsp git_commit $testroot/repo -m "committing to delta on newbranch"
599 64c6d990 2019-07-11 stsp local orig_commit1=`git_show_parent_commit $testroot/repo`
600 64c6d990 2019-07-11 stsp local orig_commit2=`git_show_head $testroot/repo`
602 64c6d990 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
603 64c6d990 2019-07-11 stsp echo "modified zeta on master" > $testroot/repo/epsilon/zeta
604 64c6d990 2019-07-11 stsp git_commit $testroot/repo -m "committing to zeta on master"
605 64c6d990 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
607 64c6d990 2019-07-11 stsp got checkout -p epsilon $testroot/repo $testroot/wt > /dev/null
609 64c6d990 2019-07-11 stsp if [ "$ret" != "0" ]; then
610 64c6d990 2019-07-11 stsp test_done "$testroot" "$ret"
614 64c6d990 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch \
615 64c6d990 2019-07-11 stsp > $testroot/stdout 2> $testroot/stderr)
617 64c6d990 2019-07-11 stsp echo -n > $testroot/stdout.expected
618 64c6d990 2019-07-11 stsp cmp -s $testroot/stdout.expected $testroot/stdout
620 64c6d990 2019-07-11 stsp if [ "$ret" != "0" ]; then
621 64c6d990 2019-07-11 stsp diff -u $testroot/stdout.expected $testroot/stdout
622 64c6d990 2019-07-11 stsp test_done "$testroot" "$ret"
626 64c6d990 2019-07-11 stsp echo -n "got: cannot rebase branch which contains changes outside " \
627 64c6d990 2019-07-11 stsp > $testroot/stderr.expected
628 64c6d990 2019-07-11 stsp echo "of this work tree's path prefix" >> $testroot/stderr.expected
629 787c8eb6 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
631 787c8eb6 2019-07-11 stsp if [ "$ret" != "0" ]; then
632 787c8eb6 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
634 787c8eb6 2019-07-11 stsp test_done "$testroot" "$ret"
637 787c8eb6 2019-07-11 stsp function test_rebase_preserves_logmsg {
638 787c8eb6 2019-07-11 stsp local testroot=`test_init rebase_preserves_logmsg`
640 787c8eb6 2019-07-11 stsp (cd $testroot/repo && git checkout -q -b newbranch)
641 787c8eb6 2019-07-11 stsp echo "modified delta on branch" > $testroot/repo/gamma/delta
642 787c8eb6 2019-07-11 stsp git_commit $testroot/repo -m "modified delta on newbranch"
644 787c8eb6 2019-07-11 stsp echo "modified alpha on branch" > $testroot/repo/alpha
645 787c8eb6 2019-07-11 stsp git_commit $testroot/repo -m "modified alpha on newbranch"
647 787c8eb6 2019-07-11 stsp (cd $testroot/repo && got log -c newbranch -l2 | grep -v ^date: \
648 787c8eb6 2019-07-11 stsp > $testroot/log.expected)
650 787c8eb6 2019-07-11 stsp local orig_commit1=`git_show_parent_commit $testroot/repo`
651 787c8eb6 2019-07-11 stsp local orig_commit2=`git_show_head $testroot/repo`
653 787c8eb6 2019-07-11 stsp (cd $testroot/repo && git checkout -q master)
654 787c8eb6 2019-07-11 stsp echo "modified zeta on master" > $testroot/repo/epsilon/zeta
655 787c8eb6 2019-07-11 stsp git_commit $testroot/repo -m "committing to zeta on master"
656 787c8eb6 2019-07-11 stsp local master_commit=`git_show_head $testroot/repo`
658 787c8eb6 2019-07-11 stsp got checkout $testroot/repo $testroot/wt > /dev/null
660 787c8eb6 2019-07-11 stsp if [ "$ret" != "0" ]; then
661 787c8eb6 2019-07-11 stsp test_done "$testroot" "$ret"
665 787c8eb6 2019-07-11 stsp (cd $testroot/wt && got rebase newbranch > /dev/null \
666 787c8eb6 2019-07-11 stsp 2> $testroot/stderr)
668 787c8eb6 2019-07-11 stsp (cd $testroot/repo && git checkout -q newbranch)
669 787c8eb6 2019-07-11 stsp local new_commit1=`git_show_parent_commit $testroot/repo`
670 787c8eb6 2019-07-11 stsp local new_commit2=`git_show_head $testroot/repo`
672 787c8eb6 2019-07-11 stsp echo -n > $testroot/stderr.expected
673 64c6d990 2019-07-11 stsp cmp -s $testroot/stderr.expected $testroot/stderr
675 64c6d990 2019-07-11 stsp if [ "$ret" != "0" ]; then
676 64c6d990 2019-07-11 stsp diff -u $testroot/stderr.expected $testroot/stderr
677 787c8eb6 2019-07-11 stsp test_done "$testroot" "$ret"
681 787c8eb6 2019-07-11 stsp (cd $testroot/wt && got log -c newbranch -l2 | grep -v ^date: \
682 787c8eb6 2019-07-11 stsp > $testroot/log)
683 787c8eb6 2019-07-11 stsp sed -i -e "s/$orig_commit1/$new_commit1/" $testroot/log.expected
684 787c8eb6 2019-07-11 stsp sed -i -e "s/$orig_commit2/$new_commit2/" $testroot/log.expected
685 787c8eb6 2019-07-11 stsp cmp -s $testroot/log.expected $testroot/log
687 787c8eb6 2019-07-11 stsp if [ "$ret" != "0" ]; then
688 787c8eb6 2019-07-11 stsp diff -u $testroot/log.expected $testroot/log
691 ff0d2220 2019-07-11 stsp test_done "$testroot" "$ret"
694 dcf44d04 2019-07-11 stsp run_test test_rebase_basic
695 dcf44d04 2019-07-11 stsp run_test test_rebase_ancestry_check
696 dcf44d04 2019-07-11 stsp run_test test_rebase_continue
697 dcf44d04 2019-07-11 stsp run_test test_rebase_abort
698 ff0d2220 2019-07-11 stsp run_test test_rebase_no_op_change
699 7d5807f4 2019-07-11 stsp run_test test_rebase_in_progress
700 64c6d990 2019-07-11 stsp run_test test_rebase_path_prefix
701 787c8eb6 2019-07-11 stsp run_test test_rebase_preserves_logmsg