]>
Commit | Line | Data |
---|---|---|
c3fb0e35 JH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2006 Junio C Hamano | |
4 | # | |
5 | ||
6 | test_description='git rebase --merge test' | |
7 | ||
8 | . ./test-lib.sh | |
9 | ||
10 | T="A quick brown fox | |
11 | jumps over the lazy dog." | |
12 | for i in 1 2 3 4 5 6 7 8 9 10 | |
13 | do | |
14 | echo "$i $T" | |
15 | done >original | |
16 | ||
17 | test_expect_success setup ' | |
18 | git add original && | |
19 | git commit -m"initial" && | |
20 | git branch side && | |
21 | echo "11 $T" >>original && | |
22 | git commit -a -m"master updates a bit." && | |
23 | ||
24 | echo "12 $T" >>original && | |
25 | git commit -a -m"master updates a bit more." && | |
26 | ||
27 | git checkout side && | |
3ea67379 | 28 | (echo "0 $T" && cat original) >renamed && |
c3fb0e35 JH |
29 | git add renamed && |
30 | git update-index --force-remove original && | |
31 | git commit -a -m"side renames and edits." && | |
32 | ||
33 | tr "[a-z]" "[A-Z]" <original >newfile && | |
34 | git add newfile && | |
35 | git commit -a -m"side edits further." && | |
95104c7e | 36 | git branch second-side && |
c3fb0e35 JH |
37 | |
38 | tr "[a-m]" "[A-M]" <original >newfile && | |
39 | rm -f original && | |
40 | git commit -a -m"side edits once again." && | |
41 | ||
42 | git branch test-rebase side && | |
43 | git branch test-rebase-pick side && | |
44 | git branch test-reference-pick side && | |
95104c7e | 45 | git branch test-conflicts side && |
c3fb0e35 JH |
46 | git checkout -b test-merge side |
47 | ' | |
48 | ||
49 | test_expect_success 'reference merge' ' | |
d45366e8 | 50 | git merge -s recursive -m "reference merge" master |
c3fb0e35 JH |
51 | ' |
52 | ||
6fd2f5e6 | 53 | PRE_REBASE=$(git rev-parse test-rebase) |
c3fb0e35 JH |
54 | test_expect_success rebase ' |
55 | git checkout test-rebase && | |
6fd2f5e6 JS |
56 | GIT_TRACE=1 git rebase --merge master |
57 | ' | |
58 | ||
59 | test_expect_success 'test-rebase@{1} is pre rebase' ' | |
60 | test $PRE_REBASE = $(git rev-parse test-rebase@{1}) | |
c3fb0e35 JH |
61 | ' |
62 | ||
63 | test_expect_success 'merge and rebase should match' ' | |
64 | git diff-tree -r test-rebase test-merge >difference && | |
65 | if test -s difference | |
66 | then | |
67 | cat difference | |
68 | (exit 1) | |
69 | else | |
70 | echo happy | |
71 | fi | |
72 | ' | |
73 | ||
74 | test_expect_success 'rebase the other way' ' | |
75 | git reset --hard master && | |
76 | git rebase --merge side | |
77 | ' | |
78 | ||
93ce190c ML |
79 | test_expect_success 'rebase -Xtheirs' ' |
80 | git checkout -b conflicting master~2 && | |
81 | echo "AB $T" >> original && | |
82 | git commit -mconflicting original && | |
83 | git rebase -Xtheirs master && | |
84 | grep AB original && | |
85 | ! grep 11 original | |
86 | ' | |
87 | ||
79f43447 BW |
88 | test_expect_success 'rebase -Xtheirs from orphan' ' |
89 | git checkout --orphan orphan-conflicting master~2 && | |
90 | echo "AB $T" >> original && | |
91 | git commit -morphan-conflicting original && | |
92 | git rebase -Xtheirs master && | |
93 | grep AB original && | |
94 | ! grep 11 original | |
95 | ' | |
96 | ||
c3fb0e35 JH |
97 | test_expect_success 'merge and rebase should match' ' |
98 | git diff-tree -r test-rebase test-merge >difference && | |
99 | if test -s difference | |
100 | then | |
101 | cat difference | |
102 | (exit 1) | |
103 | else | |
104 | echo happy | |
105 | fi | |
106 | ' | |
107 | ||
108 | test_expect_success 'picking rebase' ' | |
109 | git reset --hard side && | |
110 | git rebase --merge --onto master side^^ && | |
111 | mb=$(git merge-base master HEAD) && | |
112 | if test "$mb" = "$(git rev-parse master)" | |
113 | then | |
114 | echo happy | |
115 | else | |
116 | git show-branch | |
117 | (exit 1) | |
118 | fi && | |
119 | f=$(git diff-tree --name-only HEAD^ HEAD) && | |
120 | g=$(git diff-tree --name-only HEAD^^ HEAD^) && | |
121 | case "$f,$g" in | |
122 | newfile,newfile) | |
123 | echo happy ;; | |
124 | *) | |
125 | echo "$f" | |
126 | echo "$g" | |
127 | (exit 1) | |
128 | esac | |
129 | ' | |
130 | ||
71fc224f JH |
131 | test_expect_success 'rebase -s funny -Xopt' ' |
132 | test_when_finished "rm -fr test-bin funny.was.run" && | |
133 | mkdir test-bin && | |
134 | cat >test-bin/git-merge-funny <<-EOF && | |
135 | #!$SHELL_PATH | |
136 | case "\$1" in --opt) ;; *) exit 2 ;; esac | |
137 | shift && | |
138 | >funny.was.run && | |
139 | exec git merge-recursive "\$@" | |
140 | EOF | |
141 | chmod +x test-bin/git-merge-funny && | |
142 | git reset --hard && | |
143 | git checkout -b test-funny master^ && | |
144 | test_commit funny && | |
145 | ( | |
3ea67379 | 146 | PATH=./test-bin:$PATH && |
71fc224f JH |
147 | git rebase -s funny -Xopt master |
148 | ) && | |
149 | test -f funny.was.run | |
150 | ' | |
151 | ||
95104c7e | 152 | test_expect_success 'rebase --skip works with two conflicts in a row' ' |
153 | git checkout second-side && | |
154 | tr "[A-Z]" "[a-z]" <newfile >tmp && | |
155 | mv tmp newfile && | |
156 | git commit -a -m"edit conflicting with side" && | |
157 | tr "[d-f]" "[D-F]" <newfile >tmp && | |
158 | mv tmp newfile && | |
159 | git commit -a -m"another edit conflicting with side" && | |
160 | test_must_fail git rebase --merge test-conflicts && | |
161 | test_must_fail git rebase --skip && | |
162 | git rebase --skip | |
163 | ' | |
164 | ||
c3fb0e35 | 165 | test_done |