@@ -24,6 +24,15 @@ setup_repository () {
24
24
)
25
25
}
26
26
27
+ setup_test_clone () {
28
+ test_dir=" $1 " &&
29
+ git clone one " $test_dir " &&
30
+ for r in one two three
31
+ do
32
+ git -C " $test_dir " remote add " $r " " ../$r " || return 1
33
+ done
34
+ }
35
+
27
36
test_expect_success setup '
28
37
setup_repository one &&
29
38
setup_repository two &&
@@ -209,4 +218,156 @@ test_expect_success 'git fetch --multiple --jobs=0 picks a default' '
209
218
git fetch --multiple --jobs=0)
210
219
'
211
220
221
+ create_fetch_all_expect () {
222
+ cat > expect << -\EOF
223
+ one/main
224
+ one/side
225
+ origin/HEAD -> origin/main
226
+ origin/main
227
+ origin/side
228
+ three/another
229
+ three/main
230
+ three/side
231
+ two/another
232
+ two/main
233
+ two/side
234
+ EOF
235
+ }
236
+
237
+ for fetch_all in true false
238
+ do
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" &&
242
+ (
243
+ cd "$test_dir" &&
244
+ git config fetch.all $fetch_all &&
245
+ git fetch --all &&
246
+ create_fetch_all_expect &&
247
+ git branch -r >actual &&
248
+ test_cmp expect actual
249
+ )
250
+ '
251
+ done
252
+
253
+ test_expect_success ' git fetch (fetch all remotes with fetch.all = true)' '
254
+ setup_test_clone test9 &&
255
+ (
256
+ cd test9 &&
257
+ git config fetch.all true &&
258
+ git fetch &&
259
+ git branch -r >actual &&
260
+ create_fetch_all_expect &&
261
+ test_cmp expect actual
262
+ )
263
+ '
264
+
265
+ create_fetch_one_expect () {
266
+ cat > expect << -\EOF
267
+ one/main
268
+ one/side
269
+ origin/HEAD -> origin/main
270
+ origin/main
271
+ origin/side
272
+ EOF
273
+ }
274
+
275
+ test_expect_success ' git fetch one (explicit remote overrides fetch.all)' '
276
+ setup_test_clone test10 &&
277
+ (
278
+ cd test10 &&
279
+ git config fetch.all true &&
280
+ git fetch one &&
281
+ create_fetch_one_expect &&
282
+ git branch -r >actual &&
283
+ test_cmp expect actual
284
+ )
285
+ '
286
+
287
+ create_fetch_two_as_origin_expect () {
288
+ cat > expect << -\EOF
289
+ origin/HEAD -> origin/main
290
+ origin/another
291
+ origin/main
292
+ origin/side
293
+ EOF
294
+ }
295
+
296
+ test_expect_success ' git config fetch.all false (fetch only default remote)' '
297
+ setup_test_clone test11 &&
298
+ (
299
+ cd test11 &&
300
+ git config fetch.all false &&
301
+ git remote set-url origin ../two &&
302
+ git fetch &&
303
+ create_fetch_two_as_origin_expect &&
304
+ git branch -r >actual &&
305
+ test_cmp expect actual
306
+ )
307
+ '
308
+
309
+ for fetch_all in true false
310
+ do
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" &&
314
+ (
315
+ cd "$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
322
+ )
323
+ '
324
+ done
325
+
326
+ test_expect_success ' git fetch --no-all (fetch only default remote without fetch.all)' '
327
+ setup_test_clone test12 &&
328
+ (
329
+ cd 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
336
+ )
337
+ '
338
+
339
+ test_expect_success ' git fetch --all --no-all (fetch only default remote)' '
340
+ setup_test_clone test13 &&
341
+ (
342
+ cd 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
348
+ )
349
+ '
350
+
351
+ test_expect_success ' git fetch --no-all one (fetch only explicit remote)' '
352
+ setup_test_clone test14 &&
353
+ (
354
+ cd test14 &&
355
+ git fetch --no-all one &&
356
+ create_fetch_one_expect &&
357
+ git branch -r >actual &&
358
+ test_cmp expect actual
359
+ )
360
+ '
361
+
362
+ test_expect_success ' git fetch --no-all --all (fetch all remotes)' '
363
+ setup_test_clone test15 &&
364
+ (
365
+ cd test15 &&
366
+ git fetch --no-all --all &&
367
+ create_fetch_all_expect &&
368
+ git branch -r >actual &&
369
+ test_cmp expect actual
370
+ )
371
+ '
372
+
212
373
test_done
0 commit comments