@@ -351,6 +351,7 @@ static struct ref *get_ref_map(struct transport *transport,
351
351
/* opportunistically-updated references: */
352
352
struct ref * orefs = NULL , * * oref_tail = & orefs ;
353
353
354
+ struct string_list existing_refs = STRING_LIST_INIT_DUP ;
354
355
const struct ref * remote_refs ;
355
356
356
357
if (rs -> nr )
@@ -458,7 +459,23 @@ static struct ref *get_ref_map(struct transport *transport,
458
459
tail = & rm -> next ;
459
460
}
460
461
461
- return ref_remove_duplicates (ref_map );
462
+ ref_map = ref_remove_duplicates (ref_map );
463
+
464
+ for_each_ref (add_existing , & existing_refs );
465
+ for (rm = ref_map ; rm ; rm = rm -> next ) {
466
+ if (rm -> peer_ref ) {
467
+ struct string_list_item * peer_item =
468
+ string_list_lookup (& existing_refs ,
469
+ rm -> peer_ref -> name );
470
+ if (peer_item ) {
471
+ struct object_id * old_oid = peer_item -> util ;
472
+ oidcpy (& rm -> peer_ref -> old_oid , old_oid );
473
+ }
474
+ }
475
+ }
476
+ string_list_clear (& existing_refs , 1 );
477
+
478
+ return ref_map ;
462
479
}
463
480
464
481
#define STORE_REF_ERROR_OTHER 1
@@ -1110,14 +1127,10 @@ static void backfill_tags(struct transport *transport, struct ref *ref_map)
1110
1127
static int do_fetch (struct transport * transport ,
1111
1128
struct refspec * rs )
1112
1129
{
1113
- struct string_list existing_refs = STRING_LIST_INIT_DUP ;
1114
1130
struct ref * ref_map ;
1115
- struct ref * rm ;
1116
1131
int autotags = (transport -> remote -> fetch_tags == 1 );
1117
1132
int retcode = 0 ;
1118
1133
1119
- for_each_ref (add_existing , & existing_refs );
1120
-
1121
1134
if (tags == TAGS_DEFAULT ) {
1122
1135
if (transport -> remote -> fetch_tags == 2 )
1123
1136
tags = TAGS_SET ;
@@ -1136,18 +1149,6 @@ static int do_fetch(struct transport *transport,
1136
1149
if (!update_head_ok )
1137
1150
check_not_current_branch (ref_map );
1138
1151
1139
- for (rm = ref_map ; rm ; rm = rm -> next ) {
1140
- if (rm -> peer_ref ) {
1141
- struct string_list_item * peer_item =
1142
- string_list_lookup (& existing_refs ,
1143
- rm -> peer_ref -> name );
1144
- if (peer_item ) {
1145
- struct object_id * old_oid = peer_item -> util ;
1146
- oidcpy (& rm -> peer_ref -> old_oid , old_oid );
1147
- }
1148
- }
1149
- }
1150
-
1151
1152
if (tags == TAGS_DEFAULT && autotags )
1152
1153
transport_set_option (transport , TRANS_OPT_FOLLOWTAGS , "1" );
1153
1154
if (prune ) {
@@ -1183,7 +1184,6 @@ static int do_fetch(struct transport *transport,
1183
1184
}
1184
1185
1185
1186
cleanup :
1186
- string_list_clear (& existing_refs , 1 );
1187
1187
return retcode ;
1188
1188
}
1189
1189
0 commit comments