1
0
mirror of https://github.com/git/git.git synced 2024-09-26 18:41:28 +02:00

upload-pack: use 'struct upload_pack_data' in upload_pack()

As we cleanup 'upload-pack.c' by using 'struct upload_pack_data'
more thoroughly, let's use 'struct upload_pack_data' in
upload_pack().

This will make it possible in followup commits to remove a lot
of static variables and local variables that have the same name
and purpose as fields in 'struct upload_pack_data'. This will
also make upload_pack() work in a more similar way as
upload_pack_v2().

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Christian Couder 2020-05-15 12:04:45 +02:00 committed by Junio C Hamano
parent e8498322fa
commit ebf8ebcc56

View File

@ -1144,18 +1144,17 @@ static int upload_pack_config(const char *var, const char *value, void *unused)
void upload_pack(struct upload_pack_options *options) void upload_pack(struct upload_pack_options *options)
{ {
struct string_list symref = STRING_LIST_INIT_DUP; struct string_list symref = STRING_LIST_INIT_DUP;
struct object_array want_obj = OBJECT_ARRAY_INIT;
struct packet_reader reader; struct packet_reader reader;
struct list_objects_filter_options filter_options; struct upload_pack_data data;
stateless_rpc = options->stateless_rpc; stateless_rpc = options->stateless_rpc;
timeout = options->timeout; timeout = options->timeout;
daemon_mode = options->daemon_mode; daemon_mode = options->daemon_mode;
memset(&filter_options, 0, sizeof(filter_options));
git_config(upload_pack_config, NULL); git_config(upload_pack_config, NULL);
upload_pack_data_init(&data);
head_ref_namespaced(find_symref, &symref); head_ref_namespaced(find_symref, &symref);
if (options->advertise_refs || !stateless_rpc) { if (options->advertise_refs || !stateless_rpc) {
@ -1169,21 +1168,24 @@ void upload_pack(struct upload_pack_options *options)
for_each_namespaced_ref(check_ref, NULL); for_each_namespaced_ref(check_ref, NULL);
} }
string_list_clear(&symref, 1); string_list_clear(&symref, 1);
if (options->advertise_refs)
return;
packet_reader_init(&reader, 0, NULL, 0, if (!options->advertise_refs) {
PACKET_READ_CHOMP_NEWLINE | packet_reader_init(&reader, 0, NULL, 0,
PACKET_READ_DIE_ON_ERR_PACKET); PACKET_READ_CHOMP_NEWLINE |
PACKET_READ_DIE_ON_ERR_PACKET);
receive_needs(&reader, &want_obj, &filter_options); receive_needs(&reader, &data.want_obj, &data.filter_options);
if (want_obj.nr) { if (data.want_obj.nr) {
struct object_array have_obj = OBJECT_ARRAY_INIT; get_common_commits(&reader,
get_common_commits(&reader, &have_obj, &want_obj); &data.have_obj,
create_pack_file(&have_obj, &want_obj, &filter_options); &data.want_obj);
create_pack_file(&data.have_obj,
&data.want_obj,
&data.filter_options);
}
} }
list_objects_filter_release(&filter_options); upload_pack_data_clear(&data);
} }
static int parse_want(struct packet_writer *writer, const char *line, static int parse_want(struct packet_writer *writer, const char *line,