File tree Expand file tree Collapse file tree 4 files changed +35
-32
lines changed Expand file tree Collapse file tree 4 files changed +35
-32
lines changed Original file line number Diff line number Diff line change @@ -351,18 +351,7 @@ static struct ref *get_ref_map(struct transport *transport,
351
351
352
352
const struct ref * remote_refs ;
353
353
354
- for (i = 0 ; i < rs -> nr ; i ++ ) {
355
- const struct refspec_item * item = & rs -> items [i ];
356
- if (!item -> exact_sha1 ) {
357
- const char * glob = strchr (item -> src , '*' );
358
- if (glob )
359
- argv_array_pushf (& ref_prefixes , "%.*s" ,
360
- (int )(glob - item -> src ),
361
- item -> src );
362
- else
363
- expand_ref_prefix (& ref_prefixes , item -> src );
364
- }
365
- }
354
+ refspec_ref_prefixes (rs , & ref_prefixes );
366
355
367
356
remote_refs = transport_get_remote_refs (transport , & ref_prefixes );
368
357
Original file line number Diff line number Diff line change 1
1
#include "cache.h"
2
+ #include "argv-array.h"
2
3
#include "refs.h"
3
4
#include "refspec.h"
4
5
@@ -192,3 +193,31 @@ int valid_fetch_refspec(const char *fetch_refspec_str)
192
193
refspec_item_clear (& refspec );
193
194
return ret ;
194
195
}
196
+
197
+ void refspec_ref_prefixes (const struct refspec * rs ,
198
+ struct argv_array * ref_prefixes )
199
+ {
200
+ int i ;
201
+ for (i = 0 ; i < rs -> nr ; i ++ ) {
202
+ const struct refspec_item * item = & rs -> items [i ];
203
+ const char * prefix = NULL ;
204
+
205
+ if (rs -> fetch == REFSPEC_FETCH )
206
+ prefix = item -> src ;
207
+ else if (item -> dst )
208
+ prefix = item -> dst ;
209
+ else if (item -> src && !item -> exact_sha1 )
210
+ prefix = item -> src ;
211
+
212
+ if (prefix ) {
213
+ if (item -> pattern ) {
214
+ const char * glob = strchr (prefix , '*' );
215
+ argv_array_pushf (ref_prefixes , "%.*s" ,
216
+ (int )(glob - prefix ),
217
+ prefix );
218
+ } else {
219
+ expand_ref_prefix (ref_prefixes , prefix );
220
+ }
221
+ }
222
+ }
223
+ }
Original file line number Diff line number Diff line change @@ -41,4 +41,8 @@ void refspec_clear(struct refspec *rs);
41
41
42
42
int valid_fetch_refspec(const char *refspec);
43
43
44
+ struct argv_array;
45
+ void refspec_ref_prefixes(const struct refspec *rs,
46
+ struct argv_array *ref_prefixes);
47
+
44
48
#endif /* REFSPEC_H */
Original file line number Diff line number Diff line change @@ -1088,30 +1088,11 @@ int transport_push(struct transport *transport,
1088
1088
int pretend = flags & TRANSPORT_PUSH_DRY_RUN ;
1089
1089
int push_ret , ret , err ;
1090
1090
struct argv_array ref_prefixes = ARGV_ARRAY_INIT ;
1091
- int i ;
1092
1091
1093
1092
if (check_push_refs (local_refs , rs ) < 0 )
1094
1093
return -1 ;
1095
1094
1096
- for (i = 0 ; i < rs -> nr ; i ++ ) {
1097
- const struct refspec_item * item = & rs -> items [i ];
1098
- const char * prefix = NULL ;
1099
-
1100
- if (item -> dst )
1101
- prefix = item -> dst ;
1102
- else if (item -> src && !item -> exact_sha1 )
1103
- prefix = item -> src ;
1104
-
1105
- if (prefix ) {
1106
- const char * glob = strchr (prefix , '*' );
1107
- if (glob )
1108
- argv_array_pushf (& ref_prefixes , "%.*s" ,
1109
- (int )(glob - prefix ),
1110
- prefix );
1111
- else
1112
- expand_ref_prefix (& ref_prefixes , prefix );
1113
- }
1114
- }
1095
+ refspec_ref_prefixes (rs , & ref_prefixes );
1115
1096
1116
1097
remote_refs = transport -> vtable -> get_refs_list (transport , 1 ,
1117
1098
& ref_prefixes );
You can’t perform that action at this time.
0 commit comments