]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3412-rebase-root.sh
Merge branch 'jk/complete-branch-force-delete'
[thirdparty/git.git] / t / t3412-rebase-root.sh
CommitLineData
190f5323
TR
1#!/bin/sh
2
3test_description='git rebase --root
4
5Tests if git rebase --root --onto <newparent> can rebase the root commit.
6'
d1c02d93 7GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
334afbc7
JS
8export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
9
190f5323 10. ./test-lib.sh
21828964 11
2ea3c171
TR
12log_with_names () {
13 git rev-list --topo-order --parents --pretty="tformat:%s" HEAD |
14 git name-rev --stdin --name-only --refs=refs/heads/$1
15}
16
17
190f5323 18test_expect_success 'prepare repository' '
f7951e1d
JS
19 test_commit 1 A &&
20 test_commit 2 A &&
190f5323
TR
21 git symbolic-ref HEAD refs/heads/other &&
22 rm .git/index &&
f7951e1d
JS
23 test_commit 3 B &&
24 test_commit 1b A 1 &&
25 test_commit 4 B
190f5323
TR
26'
27
f2b6a199
MZ
28test_expect_success 'rebase --root fails with too many args' '
29 git checkout -B fail other &&
d1c02d93 30 test_must_fail git rebase --onto main --root fail fail
f2b6a199
MZ
31'
32
190f5323
TR
33test_expect_success 'setup pre-rebase hook' '
34 mkdir -p .git/hooks &&
35 cat >.git/hooks/pre-rebase <<EOF &&
36#!$SHELL_PATH
37echo "\$1,\$2" >.git/PRE-REBASE-INPUT
38EOF
39 chmod +x .git/hooks/pre-rebase
40'
41cat > expect <<EOF
424
433
442
451
46EOF
47
48test_expect_success 'rebase --root --onto <newbase>' '
f2b6a199 49 git checkout -b work other &&
d1c02d93 50 git rebase --root --onto main &&
190f5323
TR
51 git log --pretty=tformat:"%s" > rebased &&
52 test_cmp expect rebased
53'
54
55test_expect_success 'pre-rebase got correct input (1)' '
56 test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,
57'
58
59test_expect_success 'rebase --root --onto <newbase> <branch>' '
60 git branch work2 other &&
d1c02d93 61 git rebase --root --onto main work2 &&
190f5323
TR
62 git log --pretty=tformat:"%s" > rebased2 &&
63 test_cmp expect rebased2
64'
65
66test_expect_success 'pre-rebase got correct input (2)' '
67 test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,work2
68'
69
d911d146
TR
70test_expect_success 'rebase -i --root --onto <newbase>' '
71 git checkout -b work3 other &&
d1c02d93 72 git rebase -i --root --onto main &&
d911d146
TR
73 git log --pretty=tformat:"%s" > rebased3 &&
74 test_cmp expect rebased3
75'
76
77test_expect_success 'pre-rebase got correct input (3)' '
78 test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,
79'
80
81test_expect_success 'rebase -i --root --onto <newbase> <branch>' '
82 git branch work4 other &&
d1c02d93 83 git rebase -i --root --onto main work4 &&
d911d146
TR
84 git log --pretty=tformat:"%s" > rebased4 &&
85 test_cmp expect rebased4
86'
87
88test_expect_success 'pre-rebase got correct input (4)' '
89 test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,work4
90'
91
11aad464 92test_expect_success REBASE_P 'rebase -i -p with linear history' '
d911d146 93 git checkout -b work5 other &&
d1c02d93 94 git rebase -i -p --root --onto main &&
d911d146
TR
95 git log --pretty=tformat:"%s" > rebased5 &&
96 test_cmp expect rebased5
97'
98
11aad464 99test_expect_success REBASE_P 'pre-rebase got correct input (5)' '
d911d146
TR
100 test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,
101'
102
103test_expect_success 'set up merge history' '
104 git checkout other^ &&
105 git checkout -b side &&
f7951e1d 106 test_commit 5 C &&
d911d146
TR
107 git checkout other &&
108 git merge side
109'
110
2ea3c171
TR
111cat > expect-side <<'EOF'
112commit work6 work6~1 work6^2
113Merge branch 'side' into other
114commit work6^2 work6~2
1155
116commit work6~1 work6~2
1174
118commit work6~2 work6~3
1193
120commit work6~3 work6~4
1212
122commit work6~4
1231
d911d146
TR
124EOF
125
11aad464 126test_expect_success REBASE_P 'rebase -i -p with merge' '
d911d146 127 git checkout -b work6 other &&
d1c02d93 128 git rebase -i -p --root --onto main &&
2ea3c171 129 log_with_names work6 > rebased6 &&
d911d146
TR
130 test_cmp expect-side rebased6
131'
132
133test_expect_success 'set up second root and merge' '
134 git symbolic-ref HEAD refs/heads/third &&
135 rm .git/index &&
136 rm A B C &&
f7951e1d 137 test_commit 6 D &&
d911d146 138 git checkout other &&
e379fdf3 139 git merge --allow-unrelated-histories third
d911d146
TR
140'
141
2ea3c171
TR
142cat > expect-third <<'EOF'
143commit work7 work7~1 work7^2
144Merge branch 'third' into other
145commit work7^2 work7~4
1466
147commit work7~1 work7~2 work7~1^2
148Merge branch 'side' into other
149commit work7~1^2 work7~3
1505
151commit work7~2 work7~3
1524
153commit work7~3 work7~4
1543
155commit work7~4 work7~5
1562
157commit work7~5
1581
d911d146
TR
159EOF
160
11aad464 161test_expect_success REBASE_P 'rebase -i -p with two roots' '
d911d146 162 git checkout -b work7 other &&
d1c02d93 163 git rebase -i -p --root --onto main &&
2ea3c171 164 log_with_names work7 > rebased7 &&
d911d146
TR
165 test_cmp expect-third rebased7
166'
167
190f5323
TR
168test_expect_success 'setup pre-rebase hook that fails' '
169 mkdir -p .git/hooks &&
170 cat >.git/hooks/pre-rebase <<EOF &&
171#!$SHELL_PATH
172false
173EOF
174 chmod +x .git/hooks/pre-rebase
175'
176
177test_expect_success 'pre-rebase hook stops rebase' '
178 git checkout -b stops1 other &&
d1c02d93 179 test_must_fail git rebase --root --onto main &&
a48fcd83 180 test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops1 &&
190f5323
TR
181 test 0 = $(git rev-list other...stops1 | wc -l)
182'
183
d911d146
TR
184test_expect_success 'pre-rebase hook stops rebase -i' '
185 git checkout -b stops2 other &&
d1c02d93 186 test_must_fail git rebase --root --onto main &&
a48fcd83 187 test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops2 &&
d911d146
TR
188 test 0 = $(git rev-list other...stops2 | wc -l)
189'
190
a6c7a276
JH
191test_expect_success 'remove pre-rebase hook' '
192 rm -f .git/hooks/pre-rebase
193'
194
195test_expect_success 'set up a conflict' '
d1c02d93 196 git checkout main &&
a6c7a276
JH
197 echo conflict > B &&
198 git add B &&
199 git commit -m conflict
200'
201
202test_expect_success 'rebase --root with conflict (first part)' '
203 git checkout -b conflict1 other &&
d1c02d93 204 test_must_fail git rebase --root --onto main &&
a6c7a276
JH
205 git ls-files -u | grep "B$"
206'
207
208test_expect_success 'fix the conflict' '
209 echo 3 > B &&
210 git add B
211'
212
213cat > expect-conflict <<EOF
2146
2155
2164
2173
218conflict
2192
2201
221EOF
222
223test_expect_success 'rebase --root with conflict (second part)' '
224 git rebase --continue &&
225 git log --pretty=tformat:"%s" > conflict1 &&
226 test_cmp expect-conflict conflict1
227'
228
229test_expect_success 'rebase -i --root with conflict (first part)' '
230 git checkout -b conflict2 other &&
d1c02d93 231 test_must_fail git rebase -i --root --onto main &&
a6c7a276
JH
232 git ls-files -u | grep "B$"
233'
234
235test_expect_success 'fix the conflict' '
236 echo 3 > B &&
237 git add B
238'
239
240test_expect_success 'rebase -i --root with conflict (second part)' '
241 git rebase --continue &&
242 git log --pretty=tformat:"%s" > conflict2 &&
243 test_cmp expect-conflict conflict2
244'
245
246cat >expect-conflict-p <<\EOF
247commit conflict3 conflict3~1 conflict3^2
248Merge branch 'third' into other
249commit conflict3^2 conflict3~4
2506
251commit conflict3~1 conflict3~2 conflict3~1^2
252Merge branch 'side' into other
253commit conflict3~1^2 conflict3~3
2545
255commit conflict3~2 conflict3~3
2564
257commit conflict3~3 conflict3~4
2583
259commit conflict3~4 conflict3~5
260conflict
261commit conflict3~5 conflict3~6
2622
263commit conflict3~6
2641
265EOF
266
11aad464 267test_expect_success REBASE_P 'rebase -i -p --root with conflict (first part)' '
a6c7a276 268 git checkout -b conflict3 other &&
d1c02d93 269 test_must_fail git rebase -i -p --root --onto main &&
a6c7a276
JH
270 git ls-files -u | grep "B$"
271'
272
273test_expect_success 'fix the conflict' '
274 echo 3 > B &&
275 git add B
276'
277
11aad464 278test_expect_success REBASE_P 'rebase -i -p --root with conflict (second part)' '
a6c7a276 279 git rebase --continue &&
2ea3c171 280 log_with_names conflict3 >out &&
a6c7a276
JH
281 test_cmp expect-conflict-p out
282'
283
190f5323 284test_done