@@ -1356,10 +1356,8 @@ static inline void fetch_one_setup_partial(struct remote *remote)
1356
1356
1357
1357
static int fetch_one (struct remote * remote , int argc , const char * * argv , int prune_tags_ok )
1358
1358
{
1359
- static const char * * refs = NULL ;
1360
- struct refspec_item * refspec ;
1361
- int ref_nr = 0 ;
1362
- int j = 0 ;
1359
+ struct refspec rs = REFSPEC_INIT_FETCH ;
1360
+ int i ;
1363
1361
int exit_code ;
1364
1362
int maybe_prune_tags ;
1365
1363
int remote_via_config = remote_is_configured (remote , 0 );
@@ -1394,35 +1392,29 @@ static int fetch_one(struct remote *remote, int argc, const char **argv, int pru
1394
1392
if (maybe_prune_tags && remote_via_config )
1395
1393
refspec_append (& remote -> fetch , TAG_REFSPEC );
1396
1394
1397
- if (argc > 0 || (maybe_prune_tags && !remote_via_config )) {
1398
- size_t nr_alloc = st_add3 (argc , maybe_prune_tags , 1 );
1399
- refs = xcalloc (nr_alloc , sizeof (const char * ));
1400
- if (maybe_prune_tags ) {
1401
- refs [j ++ ] = xstrdup ("refs/tags/*:refs/tags/*" );
1402
- ref_nr ++ ;
1403
- }
1404
- }
1395
+ if (maybe_prune_tags && (argc || !remote_via_config ))
1396
+ refspec_append (& rs , TAG_REFSPEC );
1405
1397
1406
- if (argc > 0 ) {
1407
- int i ;
1408
- for (i = 0 ; i < argc ; i ++ ) {
1409
- if (!strcmp (argv [i ], "tag" )) {
1410
- i ++ ;
1411
- if (i >= argc )
1412
- die (_ ("You need to specify a tag name." ));
1413
- refs [j ++ ] = xstrfmt ("refs/tags/%s:refs/tags/%s" ,
1414
- argv [i ], argv [i ]);
1415
- } else
1416
- refs [j ++ ] = argv [i ];
1417
- ref_nr ++ ;
1398
+ for (i = 0 ; i < argc ; i ++ ) {
1399
+ if (!strcmp (argv [i ], "tag" )) {
1400
+ char * tag ;
1401
+ i ++ ;
1402
+ if (i >= argc )
1403
+ die (_ ("You need to specify a tag name." ));
1404
+
1405
+ tag = xstrfmt ("refs/tags/%s:refs/tags/%s" ,
1406
+ argv [i ], argv [i ]);
1407
+ refspec_append (& rs , tag );
1408
+ free (tag );
1409
+ } else {
1410
+ refspec_append (& rs , argv [i ]);
1418
1411
}
1419
1412
}
1420
1413
1421
1414
sigchain_push_common (unlock_pack_on_signal );
1422
1415
atexit (unlock_pack );
1423
- refspec = parse_fetch_refspec (ref_nr , refs );
1424
- exit_code = do_fetch (gtransport , refspec , ref_nr );
1425
- free_refspec (ref_nr , refspec );
1416
+ exit_code = do_fetch (gtransport , rs .items , rs .nr );
1417
+ refspec_clear (& rs );
1426
1418
transport_disconnect (gtransport );
1427
1419
gtransport = NULL ;
1428
1420
return exit_code ;
0 commit comments