@@ -62,6 +62,7 @@ struct upload_pack_data {
62
62
struct object_array have_obj ;
63
63
struct oid_array haves ; /* v2 only */
64
64
struct string_list wanted_refs ; /* v2 only */
65
+ struct string_list hidden_refs ;
65
66
66
67
struct object_array shallows ;
67
68
struct string_list deepen_not ;
@@ -118,6 +119,7 @@ static void upload_pack_data_init(struct upload_pack_data *data)
118
119
{
119
120
struct string_list symref = STRING_LIST_INIT_DUP ;
120
121
struct string_list wanted_refs = STRING_LIST_INIT_DUP ;
122
+ struct string_list hidden_refs = STRING_LIST_INIT_DUP ;
121
123
struct object_array want_obj = OBJECT_ARRAY_INIT ;
122
124
struct object_array have_obj = OBJECT_ARRAY_INIT ;
123
125
struct oid_array haves = OID_ARRAY_INIT ;
@@ -130,6 +132,7 @@ static void upload_pack_data_init(struct upload_pack_data *data)
130
132
memset (data , 0 , sizeof (* data ));
131
133
data -> symref = symref ;
132
134
data -> wanted_refs = wanted_refs ;
135
+ data -> hidden_refs = hidden_refs ;
133
136
data -> want_obj = want_obj ;
134
137
data -> have_obj = have_obj ;
135
138
data -> haves = haves ;
@@ -151,6 +154,7 @@ static void upload_pack_data_clear(struct upload_pack_data *data)
151
154
{
152
155
string_list_clear (& data -> symref , 1 );
153
156
string_list_clear (& data -> wanted_refs , 1 );
157
+ string_list_clear (& data -> hidden_refs , 0 );
154
158
object_array_clear (& data -> want_obj );
155
159
object_array_clear (& data -> have_obj );
156
160
oid_array_clear (& data -> haves );
@@ -842,8 +846,8 @@ static void deepen(struct upload_pack_data *data, int depth)
842
846
* Checking for reachable shallows requires that our refs be
843
847
* marked with OUR_REF.
844
848
*/
845
- head_ref_namespaced (check_ref , NULL );
846
- for_each_namespaced_ref (check_ref , NULL );
849
+ head_ref_namespaced (check_ref , data );
850
+ for_each_namespaced_ref (check_ref , data );
847
851
848
852
get_reachable_list (data , & reachable_shallows );
849
853
result = get_shallow_commits (& reachable_shallows ,
@@ -1158,11 +1162,11 @@ static void receive_needs(struct upload_pack_data *data,
1158
1162
1159
1163
/* return non-zero if the ref is hidden, otherwise 0 */
1160
1164
static int mark_our_ref (const char * refname , const char * refname_full ,
1161
- const struct object_id * oid )
1165
+ const struct object_id * oid , const struct string_list * hidden_refs )
1162
1166
{
1163
1167
struct object * o = lookup_unknown_object (the_repository , oid );
1164
1168
1165
- if (ref_is_hidden (refname , refname_full )) {
1169
+ if (ref_is_hidden (refname , refname_full , hidden_refs )) {
1166
1170
o -> flags |= HIDDEN_REF ;
1167
1171
return 1 ;
1168
1172
}
@@ -1171,11 +1175,12 @@ static int mark_our_ref(const char *refname, const char *refname_full,
1171
1175
}
1172
1176
1173
1177
static int check_ref (const char * refname_full , const struct object_id * oid ,
1174
- int flag UNUSED , void * cb_data UNUSED )
1178
+ int flag UNUSED , void * cb_data )
1175
1179
{
1176
1180
const char * refname = strip_namespace (refname_full );
1181
+ struct upload_pack_data * data = cb_data ;
1177
1182
1178
- mark_our_ref (refname , refname_full , oid );
1183
+ mark_our_ref (refname , refname_full , oid , & data -> hidden_refs );
1179
1184
return 0 ;
1180
1185
}
1181
1186
@@ -1204,7 +1209,7 @@ static int send_ref(const char *refname, const struct object_id *oid,
1204
1209
struct object_id peeled ;
1205
1210
struct upload_pack_data * data = cb_data ;
1206
1211
1207
- if (mark_our_ref (refname_nons , refname , oid ))
1212
+ if (mark_our_ref (refname_nons , refname , oid , & data -> hidden_refs ))
1208
1213
return 0 ;
1209
1214
1210
1215
if (capabilities ) {
@@ -1327,7 +1332,7 @@ static int upload_pack_config(const char *var, const char *value, void *cb_data)
1327
1332
if (parse_object_filter_config (var , value , data ) < 0 )
1328
1333
return -1 ;
1329
1334
1330
- return parse_hide_refs_config (var , value , "uploadpack" );
1335
+ return parse_hide_refs_config (var , value , "uploadpack" , & data -> hidden_refs );
1331
1336
}
1332
1337
1333
1338
static int upload_pack_protected_config (const char * var , const char * value , void * cb_data )
@@ -1375,8 +1380,8 @@ void upload_pack(const int advertise_refs, const int stateless_rpc,
1375
1380
advertise_shallow_grafts (1 );
1376
1381
packet_flush (1 );
1377
1382
} else {
1378
- head_ref_namespaced (check_ref , NULL );
1379
- for_each_namespaced_ref (check_ref , NULL );
1383
+ head_ref_namespaced (check_ref , & data );
1384
+ for_each_namespaced_ref (check_ref , & data );
1380
1385
}
1381
1386
1382
1387
if (!advertise_refs ) {
@@ -1441,6 +1446,7 @@ static int parse_want(struct packet_writer *writer, const char *line,
1441
1446
1442
1447
static int parse_want_ref (struct packet_writer * writer , const char * line ,
1443
1448
struct string_list * wanted_refs ,
1449
+ struct string_list * hidden_refs ,
1444
1450
struct object_array * want_obj )
1445
1451
{
1446
1452
const char * refname_nons ;
@@ -1451,7 +1457,7 @@ static int parse_want_ref(struct packet_writer *writer, const char *line,
1451
1457
struct strbuf refname = STRBUF_INIT ;
1452
1458
1453
1459
strbuf_addf (& refname , "%s%s" , get_git_namespace (), refname_nons );
1454
- if (ref_is_hidden (refname_nons , refname .buf ) ||
1460
+ if (ref_is_hidden (refname_nons , refname .buf , hidden_refs ) ||
1455
1461
read_ref (refname .buf , & oid )) {
1456
1462
packet_writer_error (writer , "unknown ref %s" , refname_nons );
1457
1463
die ("unknown ref %s" , refname_nons );
@@ -1508,7 +1514,7 @@ static void process_args(struct packet_reader *request,
1508
1514
continue ;
1509
1515
if (data -> allow_ref_in_want &&
1510
1516
parse_want_ref (& data -> writer , arg , & data -> wanted_refs ,
1511
- & data -> want_obj ))
1517
+ & data -> hidden_refs , & data -> want_obj ))
1512
1518
continue ;
1513
1519
/* process have line */
1514
1520
if (parse_have (arg , & data -> haves ))
0 commit comments