@@ -69,7 +69,6 @@ static const char *pack_objects_hook;
69
69
static int filter_capability_requested ;
70
70
static int allow_filter ;
71
71
static int allow_ref_in_want ;
72
- static struct list_objects_filter_options filter_options ;
73
72
74
73
static int allow_sideband_all ;
75
74
@@ -104,7 +103,8 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
104
103
}
105
104
106
105
static void create_pack_file (const struct object_array * have_obj ,
107
- const struct object_array * want_obj )
106
+ const struct object_array * want_obj ,
107
+ struct list_objects_filter_options * filter_options )
108
108
{
109
109
struct child_process pack_objects = CHILD_PROCESS_INIT ;
110
110
char data [8193 ], progress [128 ];
@@ -141,9 +141,9 @@ static void create_pack_file(const struct object_array *have_obj,
141
141
argv_array_push (& pack_objects .args , "--delta-base-offset" );
142
142
if (use_include_tag )
143
143
argv_array_push (& pack_objects .args , "--include-tag" );
144
- if (filter_options . choice ) {
144
+ if (filter_options -> choice ) {
145
145
const char * spec =
146
- expand_list_objects_filter_spec (& filter_options );
146
+ expand_list_objects_filter_spec (filter_options );
147
147
if (pack_objects .use_shell ) {
148
148
struct strbuf buf = STRBUF_INIT ;
149
149
sq_quote_buf (& buf , spec );
@@ -849,7 +849,9 @@ static int process_deepen_not(const char *line, struct string_list *deepen_not,
849
849
return 0 ;
850
850
}
851
851
852
- static void receive_needs (struct packet_reader * reader , struct object_array * want_obj )
852
+ static void receive_needs (struct packet_reader * reader ,
853
+ struct object_array * want_obj ,
854
+ struct list_objects_filter_options * filter_options )
853
855
{
854
856
struct object_array shallows = OBJECT_ARRAY_INIT ;
855
857
struct string_list deepen_not = STRING_LIST_INIT_DUP ;
@@ -884,8 +886,8 @@ static void receive_needs(struct packet_reader *reader, struct object_array *wan
884
886
if (skip_prefix (reader -> line , "filter " , & arg )) {
885
887
if (!filter_capability_requested )
886
888
die ("git upload-pack: filtering capability not negotiated" );
887
- list_objects_filter_die_if_populated (& filter_options );
888
- parse_list_objects_filter (& filter_options , arg );
889
+ list_objects_filter_die_if_populated (filter_options );
890
+ parse_list_objects_filter (filter_options , arg );
889
891
continue ;
890
892
}
891
893
@@ -1088,11 +1090,14 @@ void upload_pack(struct upload_pack_options *options)
1088
1090
struct string_list symref = STRING_LIST_INIT_DUP ;
1089
1091
struct object_array want_obj = OBJECT_ARRAY_INIT ;
1090
1092
struct packet_reader reader ;
1093
+ struct list_objects_filter_options filter_options ;
1091
1094
1092
1095
stateless_rpc = options -> stateless_rpc ;
1093
1096
timeout = options -> timeout ;
1094
1097
daemon_mode = options -> daemon_mode ;
1095
1098
1099
+ memset (& filter_options , 0 , sizeof (filter_options ));
1100
+
1096
1101
git_config (upload_pack_config , NULL );
1097
1102
1098
1103
head_ref_namespaced (find_symref , & symref );
@@ -1115,12 +1120,14 @@ void upload_pack(struct upload_pack_options *options)
1115
1120
PACKET_READ_CHOMP_NEWLINE |
1116
1121
PACKET_READ_DIE_ON_ERR_PACKET );
1117
1122
1118
- receive_needs (& reader , & want_obj );
1123
+ receive_needs (& reader , & want_obj , & filter_options );
1119
1124
if (want_obj .nr ) {
1120
1125
struct object_array have_obj = OBJECT_ARRAY_INIT ;
1121
1126
get_common_commits (& reader , & have_obj , & want_obj );
1122
- create_pack_file (& have_obj , & want_obj );
1127
+ create_pack_file (& have_obj , & want_obj , & filter_options );
1123
1128
}
1129
+
1130
+ list_objects_filter_release (& filter_options );
1124
1131
}
1125
1132
1126
1133
struct upload_pack_data {
@@ -1135,6 +1142,8 @@ struct upload_pack_data {
1135
1142
int deepen_rev_list ;
1136
1143
int deepen_relative ;
1137
1144
1145
+ struct list_objects_filter_options filter_options ;
1146
+
1138
1147
struct packet_writer writer ;
1139
1148
1140
1149
unsigned stateless_rpc : 1 ;
@@ -1170,6 +1179,7 @@ static void upload_pack_data_clear(struct upload_pack_data *data)
1170
1179
oid_array_clear (& data -> haves );
1171
1180
object_array_clear (& data -> shallows );
1172
1181
string_list_clear (& data -> deepen_not , 0 );
1182
+ list_objects_filter_release (& data -> filter_options );
1173
1183
}
1174
1184
1175
1185
static int parse_want (struct packet_writer * writer , const char * line ,
@@ -1307,8 +1317,8 @@ static void process_args(struct packet_reader *request,
1307
1317
}
1308
1318
1309
1319
if (allow_filter && skip_prefix (arg , "filter " , & p )) {
1310
- list_objects_filter_die_if_populated (& filter_options );
1311
- parse_list_objects_filter (& filter_options , p );
1320
+ list_objects_filter_die_if_populated (& data -> filter_options );
1321
+ parse_list_objects_filter (& data -> filter_options , p );
1312
1322
continue ;
1313
1323
}
1314
1324
@@ -1515,7 +1525,7 @@ int upload_pack_v2(struct repository *r, struct argv_array *keys,
1515
1525
send_shallow_info (& data , & want_obj );
1516
1526
1517
1527
packet_writer_write (& data .writer , "packfile\n" );
1518
- create_pack_file (& have_obj , & want_obj );
1528
+ create_pack_file (& have_obj , & want_obj , & data . filter_options );
1519
1529
state = FETCH_DONE ;
1520
1530
break ;
1521
1531
case FETCH_DONE :
0 commit comments