@@ -77,23 +77,9 @@ static const char *alias_url(const char *url, struct rewrites *r)
7777 return xstrfmt ("%s%s" , r -> rewrite [longest_i ]-> base , url + longest -> len );
7878}
7979
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-
8880void add_prune_tags_to_fetch_refspec (struct remote * remote )
8981{
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 );
9783}
9884
9985static void add_url (struct remote * remote , const char * url )
@@ -169,6 +155,7 @@ static struct remote *make_remote(const char *name, int len)
169155 ret -> prune_tags = -1 ; /* unspecified */
170156 ret -> name = xstrndup (name , len );
171157 refspec_init (& ret -> push , REFSPEC_PUSH );
158+ refspec_init (& ret -> fetch , REFSPEC_FETCH );
172159
173160 ALLOC_GROW (remotes , remotes_nr + 1 , remotes_alloc );
174161 remotes [remotes_nr ++ ] = ret ;
@@ -271,7 +258,7 @@ static void read_remotes_file(struct remote *remote)
271258 else if (skip_prefix (buf .buf , "Push:" , & v ))
272259 refspec_append (& remote -> push , skip_spaces (v ));
273260 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 ));
275262 }
276263 strbuf_release (& buf );
277264 fclose (f );
@@ -310,13 +297,15 @@ static void read_branches_file(struct remote *remote)
310297 frag = "master" ;
311298
312299 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 );
315303
316304 /*
317305 * Cogito compatible push: push current HEAD to remote #branch
318306 * (master if missing)
319307 */
308+ strbuf_reset (& buf );
320309 strbuf_addf (& buf , "HEAD:refs/heads/%s" , frag );
321310 refspec_append (& remote -> push , buf .buf );
322311 remote -> fetch_tags = 1 ; /* always auto-follow */
@@ -411,7 +400,8 @@ static int handle_config(const char *key, const char *value, void *cb)
411400 const char * v ;
412401 if (git_config_string (& v , key , value ))
413402 return -1 ;
414- add_fetch_refspec (remote , v );
403+ refspec_append (& remote -> fetch , v );
404+ free ((char * )v );
415405 } else if (!strcmp (subkey , "receivepack" )) {
416406 const char * v ;
417407 if (git_config_string (& v , key , value ))
@@ -578,7 +568,6 @@ static struct remote *remote_get_1(const char *name,
578568 add_url_alias (ret , name );
579569 if (!valid_remote (ret ))
580570 return NULL ;
581- ret -> fetch = parse_fetch_refspec (ret -> fetch_refspec_nr , ret -> fetch_refspec );
582571 return ret ;
583572}
584573
@@ -609,9 +598,6 @@ int for_each_remote(each_remote_fn fn, void *priv)
609598 struct remote * r = remotes [i ];
610599 if (!r )
611600 continue ;
612- if (!r -> fetch )
613- r -> fetch = parse_fetch_refspec (r -> fetch_refspec_nr ,
614- r -> fetch_refspec );
615601 result = fn (r , priv );
616602 }
617603 return result ;
@@ -790,7 +776,7 @@ char *apply_refspecs(struct refspec_item *refspecs, int nr_refspec,
790776
791777int remote_find_tracking (struct remote * remote , struct refspec_item * refspec )
792778{
793- return query_refspecs (remote -> fetch , remote -> fetch_refspec_nr , refspec );
779+ return query_refspecs (remote -> fetch . items , remote -> fetch . nr , refspec );
794780}
795781
796782static 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,
15881574{
15891575 char * ret ;
15901576
1591- ret = apply_refspecs (remote -> fetch , remote -> fetch_refspec_nr , refname );
1577+ ret = apply_refspecs (remote -> fetch . items , remote -> fetch . nr , refname );
15921578 if (!ret )
15931579 return error_buf (err ,
15941580 _ ("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,
22222208{
22232209 char * dst ;
22242210
2225- dst = apply_refspecs (remote -> fetch , remote -> fetch_refspec_nr , refname );
2211+ dst = apply_refspecs (remote -> fetch . items , remote -> fetch . nr , refname );
22262212 if (!dst )
22272213 return -1 ; /* no tracking ref for refname at remote */
22282214 if (read_ref (dst , oid ))
0 commit comments