3 test_description
='fetch --all works correctly'
5 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
=main
6 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
17 git commit
-m "Initial" &&
18 git checkout
-b side
&&
22 git commit
-m "Second" &&
29 git clone one
"$test_dir" &&
30 for r
in one two three
32 git
-C "$test_dir" remote add
"$r" "../$r" ||
return 1
36 test_expect_success setup
'
37 setup_repository one &&
38 setup_repository two &&
40 cd two && git branch another
42 git clone --mirror two three &&
46 cat > test
/expect
<< EOF
49 origin/HEAD -> origin/main
60 test_expect_success
'git fetch --all' '
62 git remote add one ../one &&
63 git remote add two ../two &&
64 git remote add three ../three &&
66 git branch -r > output &&
67 test_cmp expect output)
70 test_expect_success
'git fetch --all --no-write-fetch-head' '
72 rm -f .git/FETCH_HEAD &&
73 git fetch --all --no-write-fetch-head &&
74 test_path_is_missing .git/FETCH_HEAD)
77 test_expect_success
'git fetch --all should continue if a remote has errors' '
78 (git clone one test2 &&
80 git remote add bad ../non-existing &&
81 git remote add one ../one &&
82 git remote add two ../two &&
83 git remote add three ../three &&
84 test_must_fail git fetch --all &&
85 git branch -r > output &&
86 test_cmp ../test/expect output)
89 test_expect_success
'git fetch --all does not allow non-option arguments' '
91 test_must_fail git fetch --all origin &&
92 test_must_fail git fetch --all origin main)
96 origin/HEAD -> origin/main
104 test_expect_success
'git fetch --multiple (but only one remote)' '
105 (git clone one test3 &&
107 git remote add three ../three &&
108 git fetch --multiple three &&
109 git branch -r > output &&
110 test_cmp ../expect output)
121 test_expect_success
'git fetch --multiple (two remotes)' '
122 (git clone one test4 &&
124 git remote rm origin &&
125 git remote add one ../one &&
126 git remote add two ../two &&
127 GIT_TRACE=1 git fetch --multiple one two 2>trace &&
128 git branch -r > output &&
129 test_cmp ../expect output &&
130 grep "built-in: git maintenance" trace >gc &&
131 test_line_count = 1 gc
135 test_expect_success
'git fetch --multiple (bad remote names)' '
137 test_must_fail git fetch --multiple four)
141 test_expect_success
'git fetch --all (skipFetchAll)' '
143 for b in $(git branch -r)
145 git branch -r -d $b || exit 1
147 git remote add three ../three &&
148 git config remote.three.skipFetchAll true &&
150 git branch -r > output &&
151 test_cmp ../expect output)
165 test_expect_success
'git fetch --multiple (ignoring skipFetchAll)' '
167 for b in $(git branch -r)
169 git branch -r -d $b || exit 1
171 git fetch --multiple one two three &&
172 git branch -r > output &&
173 test_cmp ../expect output)
176 test_expect_success
'git fetch --all --no-tags' '
177 git clone one test5 &&
178 git clone test5 test6 &&
179 (cd test5 && git tag test-tag) &&
182 git fetch --all --no-tags &&
185 test_must_be_empty test6/output
188 test_expect_success
'git fetch --all --tags' '
189 echo test-tag >expect &&
190 git clone one test7 &&
191 git clone test7 test8 &&
194 test_commit test-tag &&
195 git reset --hard HEAD^
199 git fetch --all --tags &&
202 test_cmp expect test8/output
205 test_expect_success
'parallel' '
206 git remote add one ./bogus1 &&
207 git remote add two ./bogus2 &&
209 test_must_fail env GIT_TRACE="$PWD/trace" \
210 git fetch --jobs=2 --multiple one two 2>err &&
211 grep "preparing to run up to 2 tasks" trace &&
212 test_grep "could not fetch .one.*128" err &&
213 test_grep "could not fetch .two.*128" err
216 test_expect_success
'git fetch --multiple --jobs=0 picks a default' '
218 git fetch --multiple --jobs=0)
221 create_fetch_all_expect
() {
225 origin/HEAD -> origin
/main
237 for fetch_all
in true false
239 test_expect_success
"git fetch --all (works with fetch.all = $fetch_all)" '
240 test_dir="test_fetch_all_$fetch_all" &&
241 setup_test_clone "$test_dir" &&
244 git config fetch.all $fetch_all &&
246 create_fetch_all_expect &&
247 git branch -r >actual &&
248 test_cmp expect actual
253 test_expect_success
'git fetch (fetch all remotes with fetch.all = true)' '
254 setup_test_clone test9 &&
257 git config fetch.all true &&
259 git branch -r >actual &&
260 create_fetch_all_expect &&
261 test_cmp expect actual
265 create_fetch_one_expect
() {
269 origin/HEAD -> origin
/main
275 test_expect_success
'git fetch one (explicit remote overrides fetch.all)' '
276 setup_test_clone test10 &&
279 git config fetch.all true &&
281 create_fetch_one_expect &&
282 git branch -r >actual &&
283 test_cmp expect actual
287 create_fetch_two_as_origin_expect
() {
289 origin/HEAD -> origin
/main
296 test_expect_success
'git config fetch.all false (fetch only default remote)' '
297 setup_test_clone test11 &&
300 git config fetch.all false &&
301 git remote set-url origin ../two &&
303 create_fetch_two_as_origin_expect &&
304 git branch -r >actual &&
305 test_cmp expect actual
309 for fetch_all
in true false
311 test_expect_success
"git fetch --no-all (fetch only default remote with fetch.all = $fetch_all)" '
312 test_dir="test_no_all_fetch_all_$fetch_all" &&
313 setup_test_clone "$test_dir" &&
316 git config fetch.all $fetch_all &&
317 git remote set-url origin ../two &&
318 git fetch --no-all &&
319 create_fetch_two_as_origin_expect &&
320 git branch -r >actual &&
321 test_cmp expect actual
326 test_expect_success
'git fetch --no-all (fetch only default remote without fetch.all)' '
327 setup_test_clone test12 &&
330 git config --unset-all fetch.all || true &&
331 git remote set-url origin ../two &&
332 git fetch --no-all &&
333 create_fetch_two_as_origin_expect &&
334 git branch -r >actual &&
335 test_cmp expect actual
339 test_expect_success
'git fetch --all --no-all (fetch only default remote)' '
340 setup_test_clone test13 &&
343 git remote set-url origin ../two &&
344 git fetch --all --no-all &&
345 create_fetch_two_as_origin_expect &&
346 git branch -r >actual &&
347 test_cmp expect actual
351 test_expect_success
'git fetch --no-all one (fetch only explicit remote)' '
352 setup_test_clone test14 &&
355 git fetch --no-all one &&
356 create_fetch_one_expect &&
357 git branch -r >actual &&
358 test_cmp expect actual
362 test_expect_success
'git fetch --no-all --all (fetch all remotes)' '
363 setup_test_clone test15 &&
366 git fetch --no-all --all &&
367 create_fetch_all_expect &&
368 git branch -r >actual &&
369 test_cmp expect actual