]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | # | |
3 | # Copyright (c) 2010 Sverre Rabbelier | |
4 | # | |
5 | ||
6 | test_description='Test remote-helper import and export commands' | |
7 | ||
8 | . ./test-lib.sh | |
9 | . "$TEST_DIRECTORY"/lib-gpg.sh | |
10 | ||
11 | PATH="$TEST_DIRECTORY/t5801:$PATH" | |
12 | ||
13 | compare_refs() { | |
14 | git --git-dir="$1/.git" rev-parse --verify $2 >expect && | |
15 | git --git-dir="$3/.git" rev-parse --verify $4 >actual && | |
16 | test_cmp expect actual | |
17 | } | |
18 | ||
19 | test_expect_success 'setup repository' ' | |
20 | git init server && | |
21 | (cd server && | |
22 | echo content >file && | |
23 | git add file && | |
24 | git commit -m one) | |
25 | ' | |
26 | ||
27 | test_expect_success 'cloning from local repo' ' | |
28 | git clone "testgit::${PWD}/server" local && | |
29 | test_cmp server/file local/file | |
30 | ' | |
31 | ||
32 | test_expect_success 'create new commit on remote' ' | |
33 | (cd server && | |
34 | echo content >>file && | |
35 | git commit -a -m two) | |
36 | ' | |
37 | ||
38 | test_expect_success 'pulling from local repo' ' | |
39 | (cd local && git pull) && | |
40 | test_cmp server/file local/file | |
41 | ' | |
42 | ||
43 | test_expect_success 'pushing to local repo' ' | |
44 | (cd local && | |
45 | echo content >>file && | |
46 | git commit -a -m three && | |
47 | git push) && | |
48 | compare_refs local HEAD server HEAD | |
49 | ' | |
50 | ||
51 | test_expect_success 'fetch new branch' ' | |
52 | (cd server && | |
53 | git reset --hard && | |
54 | git checkout -b new && | |
55 | echo content >>file && | |
56 | git commit -a -m five | |
57 | ) && | |
58 | (cd local && | |
59 | git fetch origin new | |
60 | ) && | |
61 | compare_refs server HEAD local FETCH_HEAD | |
62 | ' | |
63 | ||
64 | test_expect_success 'fetch multiple branches' ' | |
65 | (cd local && | |
66 | git fetch | |
67 | ) && | |
68 | compare_refs server master local refs/remotes/origin/master && | |
69 | compare_refs server new local refs/remotes/origin/new | |
70 | ' | |
71 | ||
72 | test_expect_success 'push when remote has extra refs' ' | |
73 | (cd local && | |
74 | git reset --hard origin/master && | |
75 | echo content >>file && | |
76 | git commit -a -m six && | |
77 | git push | |
78 | ) && | |
79 | compare_refs local master server master | |
80 | ' | |
81 | ||
82 | test_expect_success 'push new branch by name' ' | |
83 | (cd local && | |
84 | git checkout -b new-name && | |
85 | echo content >>file && | |
86 | git commit -a -m seven && | |
87 | git push origin new-name | |
88 | ) && | |
89 | compare_refs local HEAD server refs/heads/new-name | |
90 | ' | |
91 | ||
92 | test_expect_success 'push new branch with old:new refspec' ' | |
93 | (cd local && | |
94 | git push origin new-name:new-refspec | |
95 | ) && | |
96 | compare_refs local HEAD server refs/heads/new-refspec | |
97 | ' | |
98 | ||
99 | test_expect_success 'push new branch with HEAD:new refspec' ' | |
100 | (cd local && | |
101 | git checkout new-name && | |
102 | git push origin HEAD:new-refspec-2 | |
103 | ) && | |
104 | compare_refs local HEAD server refs/heads/new-refspec-2 | |
105 | ' | |
106 | ||
107 | test_expect_success 'push delete branch' ' | |
108 | (cd local && | |
109 | git push origin :new-name | |
110 | ) && | |
111 | test_must_fail git --git-dir="server/.git" \ | |
112 | rev-parse --verify refs/heads/new-name | |
113 | ' | |
114 | ||
115 | test_expect_success 'forced push' ' | |
116 | (cd local && | |
117 | git checkout -b force-test && | |
118 | echo content >> file && | |
119 | git commit -a -m eight && | |
120 | git push origin force-test && | |
121 | echo content >> file && | |
122 | git commit -a --amend -m eight-modified && | |
123 | git push --force origin force-test | |
124 | ) && | |
125 | compare_refs local refs/heads/force-test server refs/heads/force-test | |
126 | ' | |
127 | ||
128 | test_expect_success 'cloning without refspec' ' | |
129 | GIT_REMOTE_TESTGIT_NOREFSPEC=1 \ | |
130 | git clone "testgit::${PWD}/server" local2 2>error && | |
131 | test_i18ngrep "this remote helper should implement refspec capability" error && | |
132 | compare_refs local2 HEAD server HEAD | |
133 | ' | |
134 | ||
135 | test_expect_success 'pulling without refspecs' ' | |
136 | (cd local2 && | |
137 | git reset --hard && | |
138 | GIT_REMOTE_TESTGIT_NOREFSPEC=1 git pull 2>../error) && | |
139 | test_i18ngrep "this remote helper should implement refspec capability" error && | |
140 | compare_refs local2 HEAD server HEAD | |
141 | ' | |
142 | ||
143 | test_expect_success 'pushing without refspecs' ' | |
144 | test_when_finished "(cd local2 && git reset --hard origin)" && | |
145 | (cd local2 && | |
146 | echo content >>file && | |
147 | git commit -a -m ten && | |
148 | GIT_REMOTE_TESTGIT_NOREFSPEC=1 && | |
149 | export GIT_REMOTE_TESTGIT_NOREFSPEC && | |
150 | test_must_fail git push 2>../error) && | |
151 | test_i18ngrep "remote-helper doesn.t support push; refspec needed" error | |
152 | ' | |
153 | ||
154 | test_expect_success 'pulling without marks' ' | |
155 | (cd local2 && | |
156 | GIT_REMOTE_TESTGIT_NO_MARKS=1 git pull) && | |
157 | compare_refs local2 HEAD server HEAD | |
158 | ' | |
159 | ||
160 | test_expect_failure 'pushing without marks' ' | |
161 | test_when_finished "(cd local2 && git reset --hard origin)" && | |
162 | (cd local2 && | |
163 | echo content >>file && | |
164 | git commit -a -m twelve && | |
165 | GIT_REMOTE_TESTGIT_NO_MARKS=1 git push) && | |
166 | compare_refs local2 HEAD server HEAD | |
167 | ' | |
168 | ||
169 | test_expect_success 'push all with existing object' ' | |
170 | (cd local && | |
171 | git branch dup2 master && | |
172 | git push origin --all | |
173 | ) && | |
174 | compare_refs local dup2 server dup2 | |
175 | ' | |
176 | ||
177 | test_expect_success 'push ref with existing object' ' | |
178 | (cd local && | |
179 | git branch dup master && | |
180 | git push origin dup | |
181 | ) && | |
182 | compare_refs local dup server dup | |
183 | ' | |
184 | ||
185 | test_expect_success GPG 'push signed tag' ' | |
186 | (cd local && | |
187 | git checkout master && | |
188 | git tag -s -m signed-tag signed-tag && | |
189 | git push origin signed-tag | |
190 | ) && | |
191 | compare_refs local signed-tag^{} server signed-tag^{} && | |
192 | test_must_fail compare_refs local signed-tag server signed-tag | |
193 | ' | |
194 | ||
195 | test_expect_success GPG 'push signed tag with signed-tags capability' ' | |
196 | (cd local && | |
197 | git checkout master && | |
198 | git tag -s -m signed-tag signed-tag-2 && | |
199 | GIT_REMOTE_TESTGIT_SIGNED_TAGS=1 git push origin signed-tag-2 | |
200 | ) && | |
201 | compare_refs local signed-tag-2 server signed-tag-2 | |
202 | ' | |
203 | ||
204 | test_expect_success 'push update refs' ' | |
205 | (cd local && | |
206 | git checkout -b update master && | |
207 | echo update >>file && | |
208 | git commit -a -m update && | |
209 | git push origin update && | |
210 | git rev-parse --verify remotes/origin/update >expect && | |
211 | git rev-parse --verify testgit/origin/heads/update >actual && | |
212 | test_cmp expect actual | |
213 | ) | |
214 | ' | |
215 | ||
216 | test_expect_success 'push update refs disabled by no-private-update' ' | |
217 | (cd local && | |
218 | echo more-update >>file && | |
219 | git commit -a -m more-update && | |
220 | git rev-parse --verify testgit/origin/heads/update >expect && | |
221 | GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE=t git push origin update && | |
222 | git rev-parse --verify testgit/origin/heads/update >actual && | |
223 | test_cmp expect actual | |
224 | ) | |
225 | ' | |
226 | ||
227 | test_expect_success 'push update refs failure' ' | |
228 | (cd local && | |
229 | git checkout update && | |
230 | echo "update fail" >>file && | |
231 | git commit -a -m "update fail" && | |
232 | git rev-parse --verify testgit/origin/heads/update >expect && | |
233 | test_expect_code 1 env GIT_REMOTE_TESTGIT_FAILURE="non-fast forward" \ | |
234 | git push origin update && | |
235 | git rev-parse --verify testgit/origin/heads/update >actual && | |
236 | test_cmp expect actual | |
237 | ) | |
238 | ' | |
239 | ||
240 | clean_mark () { | |
241 | cut -f 2 -d ' ' "$1" | | |
242 | git cat-file --batch-check | | |
243 | grep commit | | |
244 | sort >$(basename "$1") | |
245 | } | |
246 | ||
247 | test_expect_success 'proper failure checks for fetching' ' | |
248 | (cd local && | |
249 | test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git fetch 2>error && | |
250 | test_i18ngrep -q "error while running fast-import" error | |
251 | ) | |
252 | ' | |
253 | ||
254 | test_expect_success 'proper failure checks for pushing' ' | |
255 | test_when_finished "rm -rf local/git.marks local/testgit.marks" && | |
256 | (cd local && | |
257 | git checkout -b crash master && | |
258 | echo crash >>file && | |
259 | git commit -a -m crash && | |
260 | test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git push --all && | |
261 | clean_mark ".git/testgit/origin/git.marks" && | |
262 | clean_mark ".git/testgit/origin/testgit.marks" && | |
263 | test_cmp git.marks testgit.marks | |
264 | ) | |
265 | ' | |
266 | ||
267 | test_expect_success 'push messages' ' | |
268 | (cd local && | |
269 | git checkout -b new_branch master && | |
270 | echo new >>file && | |
271 | git commit -a -m new && | |
272 | git push origin new_branch && | |
273 | git fetch origin && | |
274 | echo new >>file && | |
275 | git commit -a -m new && | |
276 | git push origin new_branch 2> msg && | |
277 | ! grep "\[new branch\]" msg | |
278 | ) | |
279 | ' | |
280 | ||
281 | test_expect_success 'fetch HEAD' ' | |
282 | (cd server && | |
283 | git checkout master && | |
284 | echo more >>file && | |
285 | git commit -a -m more | |
286 | ) && | |
287 | (cd local && | |
288 | git fetch origin HEAD | |
289 | ) && | |
290 | compare_refs server HEAD local FETCH_HEAD | |
291 | ' | |
292 | ||
293 | test_expect_success 'fetch url' ' | |
294 | (cd server && | |
295 | git checkout master && | |
296 | echo more >>file && | |
297 | git commit -a -m more | |
298 | ) && | |
299 | (cd local && | |
300 | git fetch "testgit::${PWD}/../server" | |
301 | ) && | |
302 | compare_refs server HEAD local FETCH_HEAD | |
303 | ' | |
304 | ||
305 | test_expect_success 'fetch tag' ' | |
306 | (cd server && | |
307 | git tag v1.0 | |
308 | ) && | |
309 | (cd local && | |
310 | git fetch | |
311 | ) && | |
312 | compare_refs local v1.0 server v1.0 | |
313 | ' | |
314 | ||
315 | test_done |