]> git.ipfire.org Git - thirdparty/git.git/blame - t/t5505-remote.sh
Documentation: minor cleanup in a use case in 'git stash' manual
[thirdparty/git.git] / t / t5505-remote.sh
CommitLineData
683b5679
JH
1#!/bin/sh
2
3test_description='git remote porcelain-ish'
4
5. ./test-lib.sh
6
683b5679
JH
7setup_repository () {
8 mkdir "$1" && (
9 cd "$1" &&
10 git init &&
11 >file &&
12 git add file &&
84521ed6 13 test_tick &&
683b5679
JH
14 git commit -m "Initial" &&
15 git checkout -b side &&
16 >elif &&
17 git add elif &&
84521ed6 18 test_tick &&
683b5679
JH
19 git commit -m "Second" &&
20 git checkout master
21 )
22}
23
24tokens_match () {
25 echo "$1" | tr ' ' '\012' | sort | sed -e '/^$/d' >expect &&
26 echo "$2" | tr ' ' '\012' | sort | sed -e '/^$/d' >actual &&
82ebb0b6 27 test_cmp expect actual
683b5679
JH
28}
29
30check_remote_track () {
31 actual=$(git remote show "$1" | sed -n -e '$p') &&
32 shift &&
33 tokens_match "$*" "$actual"
34}
35
36check_tracking_branch () {
37 f="" &&
38 r=$(git for-each-ref "--format=%(refname)" |
39 sed -ne "s|^refs/remotes/$1/||p") &&
40 shift &&
41 tokens_match "$*" "$r"
42}
43
44test_expect_success setup '
45
46 setup_repository one &&
47 setup_repository two &&
48 (
49 cd two && git branch another
50 ) &&
51 git clone one test
52
53'
54
55test_expect_success 'remote information for the origin' '
56(
57 cd test &&
58 tokens_match origin "$(git remote)" &&
59 check_remote_track origin master side &&
60 check_tracking_branch origin HEAD master side
61)
62'
63
64test_expect_success 'add another remote' '
65(
66 cd test &&
67 git remote add -f second ../two &&
68 tokens_match "origin second" "$(git remote)" &&
69 check_remote_track origin master side &&
70 check_remote_track second master side another &&
71 check_tracking_branch second master side another &&
72 git for-each-ref "--format=%(refname)" refs/remotes |
73 sed -e "/^refs\/remotes\/origin\//d" \
74 -e "/^refs\/remotes\/second\//d" >actual &&
75 >expect &&
82ebb0b6 76 test_cmp expect actual
683b5679
JH
77)
78'
79
1ce89cc4
JK
80test_expect_success 'remote forces tracking branches' '
81(
82 cd test &&
83 case `git config remote.second.fetch` in
84 +*) true ;;
85 *) false ;;
86 esac
87)
88'
89
683b5679
JH
90test_expect_success 'remove remote' '
91(
92 cd test &&
3b9dcff5 93 git symbolic-ref refs/remotes/second/HEAD refs/remotes/second/master &&
683b5679
JH
94 git remote rm second
95)
96'
97
98test_expect_success 'remove remote' '
99(
100 cd test &&
101 tokens_match origin "$(git remote)" &&
102 check_remote_track origin master side &&
103 git for-each-ref "--format=%(refname)" refs/remotes |
104 sed -e "/^refs\/remotes\/origin\//d" >actual &&
105 >expect &&
82ebb0b6 106 test_cmp expect actual
683b5679
JH
107)
108'
109
4704640b
JS
110cat > test/expect << EOF
111* remote origin
112 URL: $(pwd)/one/.git
211c8968 113 Remote branch merged with 'git pull' while on branch master
4704640b 114 master
211c8968 115 New remote branch (next fetch will store in remotes/origin)
4704640b
JS
116 master
117 Tracked remote branches
118 side master
ec31b0ce
JS
119 Local branches pushed with 'git push'
120 master:upstream +refs/tags/lastbackup
4704640b
JS
121EOF
122
123test_expect_success 'show' '
124 (cd test &&
125 git config --add remote.origin.fetch \
126 refs/heads/master:refs/heads/upstream &&
127 git fetch &&
128 git branch -d -r origin/master &&
129 (cd ../one &&
130 echo 1 > file &&
84521ed6 131 test_tick &&
4704640b 132 git commit -m update file) &&
ec31b0ce
JS
133 git config remote.origin.push \
134 refs/heads/master:refs/heads/upstream &&
135 git config --add remote.origin.push \
136 +refs/tags/lastbackup &&
4704640b 137 git remote show origin > output &&
3af82863 138 test_cmp expect output)
4704640b
JS
139'
140
0ecfcb3b
OM
141cat > test/expect << EOF
142* remote origin
143 URL: $(pwd)/one/.git
144 Remote branch merged with 'git pull' while on branch master
145 master
e7d5a97d
OM
146 Tracked remote branches
147 master side
0ecfcb3b
OM
148 Local branches pushed with 'git push'
149 master:upstream +refs/tags/lastbackup
150EOF
151
152test_expect_success 'show -n' '
153 (mv one one.unreachable &&
154 cd test &&
155 git remote show -n origin > output &&
156 mv ../one.unreachable ../one &&
157 test_cmp expect output)
158'
159
4704640b
JS
160test_expect_success 'prune' '
161 (cd one &&
162 git branch -m side side2) &&
163 (cd test &&
164 git fetch origin &&
165 git remote prune origin &&
166 git rev-parse refs/remotes/origin/side2 &&
d492b31c 167 test_must_fail git rev-parse refs/remotes/origin/side)
4704640b
JS
168'
169
8d767927
OM
170cat > test/expect << EOF
171Pruning origin
172URL: $(pwd)/one/.git
173 * [would prune] origin/side2
174EOF
175
176test_expect_success 'prune --dry-run' '
177 (cd one &&
178 git branch -m side2 side) &&
179 (cd test &&
180 git remote prune --dry-run origin > output &&
181 git rev-parse refs/remotes/origin/side2 &&
d492b31c 182 test_must_fail git rev-parse refs/remotes/origin/side &&
8d767927
OM
183 (cd ../one &&
184 git branch -m side side2) &&
185 test_cmp expect output)
186'
187
4ebc914c
JS
188test_expect_success 'add --mirror && prune' '
189 (mkdir mirror &&
190 cd mirror &&
191 git init &&
192 git remote add --mirror -f origin ../one) &&
193 (cd one &&
194 git branch -m side2 side) &&
195 (cd mirror &&
196 git rev-parse --verify refs/heads/side2 &&
d492b31c 197 test_must_fail git rev-parse --verify refs/heads/side &&
4ebc914c
JS
198 git fetch origin &&
199 git remote prune origin &&
d492b31c 200 test_must_fail git rev-parse --verify refs/heads/side2 &&
4ebc914c
JS
201 git rev-parse --verify refs/heads/side)
202'
203
c175a7ad
SP
204test_expect_success 'add alt && prune' '
205 (mkdir alttst &&
206 cd alttst &&
207 git init &&
208 git remote add -f origin ../one &&
209 git config remote.alt.url ../one &&
210 git config remote.alt.fetch "+refs/heads/*:refs/remotes/origin/*") &&
211 (cd one &&
212 git branch -m side side2) &&
213 (cd alttst &&
214 git rev-parse --verify refs/remotes/origin/side &&
d492b31c 215 test_must_fail git rev-parse --verify refs/remotes/origin/side2 &&
c175a7ad
SP
216 git fetch alt &&
217 git remote prune alt &&
d492b31c 218 test_must_fail git rev-parse --verify refs/remotes/origin/side &&
c175a7ad
SP
219 git rev-parse --verify refs/remotes/origin/side2)
220'
221
84521ed6
JS
222cat > one/expect << EOF
223 apis/master
224 apis/side
225 drosophila/another
226 drosophila/master
227 drosophila/side
228EOF
229
230test_expect_success 'update' '
231
232 (cd one &&
233 git remote add drosophila ../two &&
234 git remote add apis ../mirror &&
235 git remote update &&
236 git branch -r > output &&
3af82863 237 test_cmp expect output)
84521ed6
JS
238
239'
240
241cat > one/expect << EOF
242 drosophila/another
243 drosophila/master
244 drosophila/side
245 manduca/master
246 manduca/side
247 megaloprepus/master
248 megaloprepus/side
249EOF
250
251test_expect_success 'update with arguments' '
252
253 (cd one &&
254 for b in $(git branch -r)
255 do
256 git branch -r -d $b || break
257 done &&
258 git remote add manduca ../mirror &&
259 git remote add megaloprepus ../mirror &&
260 git config remotes.phobaeticus "drosophila megaloprepus" &&
261 git config remotes.titanus manduca &&
262 git remote update phobaeticus titanus &&
263 git branch -r > output &&
3af82863 264 test_cmp expect output)
84521ed6
JS
265
266'
267
268cat > one/expect << EOF
269 apis/master
270 apis/side
271 manduca/master
272 manduca/side
273 megaloprepus/master
274 megaloprepus/side
275EOF
276
277test_expect_success 'update default' '
278
279 (cd one &&
280 for b in $(git branch -r)
281 do
282 git branch -r -d $b || break
283 done &&
284 git config remote.drosophila.skipDefaultUpdate true &&
285 git remote update default &&
286 git branch -r > output &&
3af82863 287 test_cmp expect output)
84521ed6
JS
288
289'
290
291cat > one/expect << EOF
292 drosophila/another
293 drosophila/master
294 drosophila/side
295EOF
296
297test_expect_success 'update default (overridden, with funny whitespace)' '
298
299 (cd one &&
300 for b in $(git branch -r)
301 do
302 git branch -r -d $b || break
303 done &&
304 git config remotes.default "$(printf "\t drosophila \n")" &&
305 git remote update default &&
306 git branch -r > output &&
3af82863 307 test_cmp expect output)
84521ed6
JS
308
309'
310
740fdd27
JS
311test_expect_success '"remote show" does not show symbolic refs' '
312
313 git clone one three &&
314 (cd three &&
315 git remote show origin > output &&
316 ! grep HEAD < output &&
317 ! grep -i stale < output)
318
319'
320
24b6177e
JF
321test_expect_success 'reject adding remote with an invalid name' '
322
d492b31c 323 test_must_fail git remote add some:url desired-name
24b6177e
JF
324
325'
326
683b5679 327test_done