blob: 35304b41e9ce6222f7d713e3d310e47241d8e6e0 [file] [log] [blame]
Linus Torvaldsd09e79c2006-11-16 11:47:22 -08001#!/bin/sh
2
3test_description='pulling into void'
4
5. ./test-lib.sh
6
Elijah Newren3cee9232010-08-12 19:50:49 -06007modify () {
8 sed -e "$1" <"$2" >"$2.x" &&
9 mv "$2.x" "$2"
10}
11
Linus Torvaldsd09e79c2006-11-16 11:47:22 -080012D=`pwd`
13
14test_expect_success setup '
15
16 echo file >file &&
17 git add file &&
18 git commit -a -m original
19
20'
21
22test_expect_success 'pulling into void' '
23 mkdir cloned &&
24 cd cloned &&
Nicolas Pitre5c94f872007-01-12 16:01:46 -050025 git init &&
Linus Torvaldsd09e79c2006-11-16 11:47:22 -080026 git pull ..
27'
28
29cd "$D"
30
31test_expect_success 'checking the results' '
32 test -f file &&
33 test -f cloned/file &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000034 test_cmp file cloned/file
Linus Torvaldsd09e79c2006-11-16 11:47:22 -080035'
36
Junio C Hamanob0ad11e2008-10-14 15:32:20 -070037test_expect_success 'pulling into void using master:master' '
38 mkdir cloned-uho &&
39 (
40 cd cloned-uho &&
41 git init &&
42 git pull .. master:master
43 ) &&
44 test -f file &&
45 test -f cloned-uho/file &&
46 test_cmp file cloned-uho/file
47'
48
Jeff King4b3ffe52011-03-25 14:13:31 -040049test_expect_success 'pulling into void does not overwrite untracked files' '
50 git init cloned-untracked &&
51 (
52 cd cloned-untracked &&
53 echo untracked >file &&
54 test_must_fail git pull .. master &&
55 echo untracked >expect &&
56 test_cmp expect file
57 )
58'
59
Paolo Bonzini9debc322007-03-15 09:23:20 +010060test_expect_success 'test . as a remote' '
61
62 git branch copy master &&
63 git config branch.copy.remote . &&
64 git config branch.copy.merge refs/heads/master &&
65 echo updated >file &&
66 git commit -a -m updated &&
67 git checkout copy &&
68 test `cat file` = file &&
69 git pull &&
70 test `cat file` = updated
71'
72
73test_expect_success 'the default remote . should not break explicit pull' '
74 git checkout -b second master^ &&
75 echo modified >file &&
76 git commit -a -m modified &&
77 git checkout copy &&
78 git reset --hard HEAD^ &&
79 test `cat file` = file &&
80 git pull . second &&
81 test `cat file` = modified
82'
83
Johannes Schindelincd67e4d2007-11-28 13:11:07 +000084test_expect_success '--rebase' '
85 git branch to-rebase &&
86 echo modified again > file &&
87 git commit -m file file &&
88 git checkout to-rebase &&
89 echo new > file2 &&
90 git add file2 &&
91 git commit -m "new file" &&
92 git tag before-rebase &&
93 git pull --rebase . copy &&
94 test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
95 test new = $(git show HEAD:file2)
96'
Ævar Arnfjörð Bjarmason6b37dff2011-11-06 10:50:10 +010097test_expect_success 'pull.rebase' '
98 git reset --hard before-rebase &&
99 git config --bool pull.rebase true &&
100 test_when_finished "git config --unset pull.rebase" &&
101 git pull . copy &&
102 test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
103 test new = $(git show HEAD:file2)
104'
Johannes Schindelincd67e4d2007-11-28 13:11:07 +0000105
106test_expect_success 'branch.to-rebase.rebase' '
107 git reset --hard before-rebase &&
Ævar Arnfjörð Bjarmason6b37dff2011-11-06 10:50:10 +0100108 git config --bool branch.to-rebase.rebase true &&
109 test_when_finished "git config --unset branch.to-rebase.rebase" &&
Johannes Schindelincd67e4d2007-11-28 13:11:07 +0000110 git pull . copy &&
111 test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
112 test new = $(git show HEAD:file2)
113'
114
Ævar Arnfjörð Bjarmason6b37dff2011-11-06 10:50:10 +0100115test_expect_success 'branch.to-rebase.rebase should override pull.rebase' '
116 git reset --hard before-rebase &&
117 git config --bool pull.rebase true &&
118 test_when_finished "git config --unset pull.rebase" &&
119 git config --bool branch.to-rebase.rebase false &&
120 test_when_finished "git config --unset branch.to-rebase.rebase" &&
121 git pull . copy &&
122 test $(git rev-parse HEAD^) != $(git rev-parse copy) &&
123 test new = $(git show HEAD:file2)
124'
125
Johannes Schindelinc85c7922008-01-26 18:04:37 +0000126test_expect_success '--rebase with rebased upstream' '
127
128 git remote add -f me . &&
129 git checkout copy &&
Santi Béjare9460a62009-06-12 00:39:19 +0200130 git tag copy-orig &&
Johannes Schindelinc85c7922008-01-26 18:04:37 +0000131 git reset --hard HEAD^ &&
132 echo conflicting modification > file &&
133 git commit -m conflict file &&
134 git checkout to-rebase &&
135 echo file > file2 &&
136 git commit -m to-rebase file2 &&
Santi Béjare9460a62009-06-12 00:39:19 +0200137 git tag to-rebase-orig &&
Johannes Schindelinc85c7922008-01-26 18:04:37 +0000138 git pull --rebase me copy &&
139 test "conflicting modification" = "$(cat file)" &&
140 test file = $(cat file2)
141
142'
143
Santi Béjare9460a62009-06-12 00:39:19 +0200144test_expect_success '--rebase with rebased default upstream' '
145
146 git update-ref refs/remotes/me/copy copy-orig &&
147 git checkout --track -b to-rebase2 me/copy &&
148 git reset --hard to-rebase-orig &&
149 git pull --rebase &&
150 test "conflicting modification" = "$(cat file)" &&
151 test file = $(cat file2)
152
153'
154
Santi Béjard44e7122009-07-19 09:45:16 +0200155test_expect_success 'rebased upstream + fetch + pull --rebase' '
Santi Béjara4184412009-07-16 02:09:14 +0200156
157 git update-ref refs/remotes/me/copy copy-orig &&
158 git reset --hard to-rebase-orig &&
159 git checkout --track -b to-rebase3 me/copy &&
160 git reset --hard to-rebase-orig &&
161 git fetch &&
Santi Béjard44e7122009-07-19 09:45:16 +0200162 git pull --rebase &&
Santi Béjara4184412009-07-16 02:09:14 +0200163 test "conflicting modification" = "$(cat file)" &&
164 test file = "$(cat file2)"
165
166'
167
Johannes Schindelinf9189cf2008-05-21 12:32:16 +0100168test_expect_success 'pull --rebase dies early with dirty working directory' '
169
Santi Béjare9460a62009-06-12 00:39:19 +0200170 git checkout to-rebase &&
Johannes Schindelinf9189cf2008-05-21 12:32:16 +0100171 git update-ref refs/remotes/me/copy copy^ &&
172 COPY=$(git rev-parse --verify me/copy) &&
173 git rebase --onto $COPY copy &&
174 git config branch.to-rebase.remote me &&
175 git config branch.to-rebase.merge refs/heads/copy &&
176 git config branch.to-rebase.rebase true &&
177 echo dirty >> file &&
178 git add file &&
179 test_must_fail git pull &&
180 test $COPY = $(git rev-parse --verify me/copy) &&
181 git checkout HEAD -- file &&
182 git pull &&
183 test $COPY != $(git rev-parse --verify me/copy)
184
185'
186
Jeff King19a7fcb2009-08-11 23:27:40 -0400187test_expect_success 'pull --rebase works on branch yet to be born' '
188 git rev-parse master >expect &&
189 mkdir empty_repo &&
190 (cd empty_repo &&
191 git init &&
192 git pull --rebase .. master &&
193 git rev-parse HEAD >../actual
194 ) &&
195 test_cmp expect actual
196'
197
Elijah Newren3cee9232010-08-12 19:50:49 -0600198test_expect_success 'setup for detecting upstreamed changes' '
199 mkdir src &&
200 (cd src &&
201 git init &&
202 printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" > stuff &&
203 git add stuff &&
204 git commit -m "Initial revision"
205 ) &&
206 git clone src dst &&
207 (cd src &&
208 modify s/5/43/ stuff &&
209 git commit -a -m "5->43" &&
210 modify s/6/42/ stuff &&
211 git commit -a -m "Make it bigger"
212 ) &&
213 (cd dst &&
214 modify s/5/43/ stuff &&
215 git commit -a -m "Independent discovery of 5->43"
216 )
217'
218
Elijah Newrencf654262010-08-12 19:50:50 -0600219test_expect_success 'git pull --rebase detects upstreamed changes' '
Elijah Newren3cee9232010-08-12 19:50:49 -0600220 (cd dst &&
221 git pull --rebase &&
222 test -z "$(git ls-files -u)"
223 )
224'
225
226test_expect_success 'setup for avoiding reapplying old patches' '
227 (cd dst &&
228 test_might_fail git rebase --abort &&
229 git reset --hard origin/master
230 ) &&
231 git clone --bare src src-replace.git &&
232 rm -rf src &&
233 mv src-replace.git src &&
234 (cd dst &&
235 modify s/2/22/ stuff &&
236 git commit -a -m "Change 2" &&
237 modify s/3/33/ stuff &&
238 git commit -a -m "Change 3" &&
239 modify s/4/44/ stuff &&
240 git commit -a -m "Change 4" &&
241 git push &&
242
243 modify s/44/55/ stuff &&
244 git commit --amend -a -m "Modified Change 4"
245 )
246'
247
Elijah Newrencf654262010-08-12 19:50:50 -0600248test_expect_success 'git pull --rebase does not reapply old patches' '
Elijah Newren3cee9232010-08-12 19:50:49 -0600249 (cd dst &&
250 test_must_fail git pull --rebase &&
251 test 1 = $(find .git/rebase-apply -name "000*" | wc -l)
252 )
253'
254
Martin von Zweigbergkfe249b42010-11-13 23:58:22 +0100255test_expect_success 'git pull --rebase against local branch' '
256 git checkout -b copy2 to-rebase-orig &&
257 git pull --rebase . to-rebase &&
258 test "conflicting modification" = "$(cat file)" &&
259 test file = "$(cat file2)"
260'
261
Linus Torvaldsd09e79c2006-11-16 11:47:22 -0800262test_done