@@ -77,23 +77,9 @@ static const char *alias_url(const char *url, struct rewrites *r)
77
77
return xstrfmt ("%s%s" , r -> rewrite [longest_i ]-> base , url + longest -> len );
78
78
}
79
79
80
- static void add_fetch_refspec (struct remote * remote , const char * ref )
81
- {
82
- ALLOC_GROW (remote -> fetch_refspec ,
83
- remote -> fetch_refspec_nr + 1 ,
84
- remote -> fetch_refspec_alloc );
85
- remote -> fetch_refspec [remote -> fetch_refspec_nr ++ ] = ref ;
86
- }
87
-
88
80
void add_prune_tags_to_fetch_refspec (struct remote * remote )
89
81
{
90
- int nr = remote -> fetch_refspec_nr ;
91
- int bufsize = nr + 1 ;
92
- int size = sizeof (struct refspec_item );
93
-
94
- remote -> fetch = xrealloc (remote -> fetch , size * bufsize );
95
- memcpy (& remote -> fetch [nr ], tag_refspec , size );
96
- add_fetch_refspec (remote , xstrdup (TAG_REFSPEC ));
82
+ refspec_append (& remote -> fetch , TAG_REFSPEC );
97
83
}
98
84
99
85
static void add_url (struct remote * remote , const char * url )
@@ -169,6 +155,7 @@ static struct remote *make_remote(const char *name, int len)
169
155
ret -> prune_tags = -1 ; /* unspecified */
170
156
ret -> name = xstrndup (name , len );
171
157
refspec_init (& ret -> push , REFSPEC_PUSH );
158
+ refspec_init (& ret -> fetch , REFSPEC_FETCH );
172
159
173
160
ALLOC_GROW (remotes , remotes_nr + 1 , remotes_alloc );
174
161
remotes [remotes_nr ++ ] = ret ;
@@ -271,7 +258,7 @@ static void read_remotes_file(struct remote *remote)
271
258
else if (skip_prefix (buf .buf , "Push:" , & v ))
272
259
refspec_append (& remote -> push , skip_spaces (v ));
273
260
else if (skip_prefix (buf .buf , "Pull:" , & v ))
274
- add_fetch_refspec ( remote , xstrdup ( skip_spaces (v ) ));
261
+ refspec_append ( & remote -> fetch , skip_spaces (v ));
275
262
}
276
263
strbuf_release (& buf );
277
264
fclose (f );
@@ -310,13 +297,15 @@ static void read_branches_file(struct remote *remote)
310
297
frag = "master" ;
311
298
312
299
add_url_alias (remote , strbuf_detach (& buf , NULL ));
313
- add_fetch_refspec (remote , xstrfmt ("refs/heads/%s:refs/heads/%s" ,
314
- frag , remote -> name ));
300
+ strbuf_addf (& buf , "refs/heads/%s:refs/heads/%s" ,
301
+ frag , remote -> name );
302
+ refspec_append (& remote -> fetch , buf .buf );
315
303
316
304
/*
317
305
* Cogito compatible push: push current HEAD to remote #branch
318
306
* (master if missing)
319
307
*/
308
+ strbuf_reset (& buf );
320
309
strbuf_addf (& buf , "HEAD:refs/heads/%s" , frag );
321
310
refspec_append (& remote -> push , buf .buf );
322
311
remote -> fetch_tags = 1 ; /* always auto-follow */
@@ -411,7 +400,8 @@ static int handle_config(const char *key, const char *value, void *cb)
411
400
const char * v ;
412
401
if (git_config_string (& v , key , value ))
413
402
return -1 ;
414
- add_fetch_refspec (remote , v );
403
+ refspec_append (& remote -> fetch , v );
404
+ free ((char * )v );
415
405
} else if (!strcmp (subkey , "receivepack" )) {
416
406
const char * v ;
417
407
if (git_config_string (& v , key , value ))
@@ -578,7 +568,6 @@ static struct remote *remote_get_1(const char *name,
578
568
add_url_alias (ret , name );
579
569
if (!valid_remote (ret ))
580
570
return NULL ;
581
- ret -> fetch = parse_fetch_refspec (ret -> fetch_refspec_nr , ret -> fetch_refspec );
582
571
return ret ;
583
572
}
584
573
@@ -609,9 +598,6 @@ int for_each_remote(each_remote_fn fn, void *priv)
609
598
struct remote * r = remotes [i ];
610
599
if (!r )
611
600
continue ;
612
- if (!r -> fetch )
613
- r -> fetch = parse_fetch_refspec (r -> fetch_refspec_nr ,
614
- r -> fetch_refspec );
615
601
result = fn (r , priv );
616
602
}
617
603
return result ;
@@ -790,7 +776,7 @@ char *apply_refspecs(struct refspec_item *refspecs, int nr_refspec,
790
776
791
777
int remote_find_tracking (struct remote * remote , struct refspec_item * refspec )
792
778
{
793
- return query_refspecs (remote -> fetch , remote -> fetch_refspec_nr , refspec );
779
+ return query_refspecs (remote -> fetch . items , remote -> fetch . nr , refspec );
794
780
}
795
781
796
782
static struct ref * alloc_ref_with_prefix (const char * prefix , size_t prefixlen ,
@@ -1588,7 +1574,7 @@ static const char *tracking_for_push_dest(struct remote *remote,
1588
1574
{
1589
1575
char * ret ;
1590
1576
1591
- ret = apply_refspecs (remote -> fetch , remote -> fetch_refspec_nr , refname );
1577
+ ret = apply_refspecs (remote -> fetch . items , remote -> fetch . nr , refname );
1592
1578
if (!ret )
1593
1579
return error_buf (err ,
1594
1580
_ ("push destination '%s' on remote '%s' has no local tracking branch" ),
@@ -2222,7 +2208,7 @@ static int remote_tracking(struct remote *remote, const char *refname,
2222
2208
{
2223
2209
char * dst ;
2224
2210
2225
- dst = apply_refspecs (remote -> fetch , remote -> fetch_refspec_nr , refname );
2211
+ dst = apply_refspecs (remote -> fetch . items , remote -> fetch . nr , refname );
2226
2212
if (!dst )
2227
2213
return -1 ; /* no tracking ref for refname at remote */
2228
2214
if (read_ref (dst , oid ))
0 commit comments