mirror of
https://github.com/ostreedev/ostree.git
synced 2025-03-19 22:50:35 +03:00
metalink: have a single entry to the metalink module
Replace _ostree_metalink_request_async with a synchronous version. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
d5d73debd8
commit
c832e9b751
@ -658,33 +658,21 @@ static const GMarkupParser metalink_parser = {
|
||||
NULL
|
||||
};
|
||||
|
||||
void
|
||||
_ostree_metalink_request_async (OstreeMetalink *self,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
typedef struct
|
||||
{
|
||||
GTask *task = g_task_new (self, cancellable, callback, user_data);
|
||||
OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1);
|
||||
SoupURI **out_target_uri;
|
||||
GFile **out_data;
|
||||
gboolean success;
|
||||
GError **error;
|
||||
GMainLoop *loop;
|
||||
} FetchMetalinkSyncData;
|
||||
|
||||
request->metalink = g_object_ref (self);
|
||||
request->urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free);
|
||||
request->task = task; /* Unowned */
|
||||
|
||||
request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL);
|
||||
|
||||
g_task_set_task_data (task, request, ostree_metalink_request_unref);
|
||||
_ostree_fetcher_stream_uri_async (self->fetcher, self->uri,
|
||||
self->max_size, cancellable,
|
||||
on_retrieved_metalink, task);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_ostree_metalink_request_finish (OstreeMetalink *self,
|
||||
GAsyncResult *result,
|
||||
SoupURI **out_target_uri,
|
||||
GFile **out_data,
|
||||
GError **error)
|
||||
static gboolean
|
||||
ostree_metalink_request_finish (OstreeMetalink *self,
|
||||
GAsyncResult *result,
|
||||
SoupURI **out_target_uri,
|
||||
GFile **out_data,
|
||||
GError **error)
|
||||
{
|
||||
OstreeMetalinkRequest *request;
|
||||
|
||||
@ -703,6 +691,54 @@ _ostree_metalink_request_finish (OstreeMetalink *self,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_metalink_fetched (GObject *src,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
FetchMetalinkSyncData *data = user_data;
|
||||
|
||||
data->success = ostree_metalink_request_finish ((OstreeMetalink*)src,
|
||||
result,
|
||||
data->out_target_uri,
|
||||
data->out_data,
|
||||
data->error);
|
||||
g_main_loop_quit (data->loop);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_ostree_metalink_request_sync (OstreeMetalink *self,
|
||||
GMainLoop *loop,
|
||||
SoupURI **out_target_uri,
|
||||
GFile **out_data,
|
||||
SoupURI **fetching_sync_uri,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1);
|
||||
FetchMetalinkSyncData data = { 0, };
|
||||
GTask *task = g_task_new (self, cancellable, on_metalink_fetched, &data);
|
||||
|
||||
data.out_target_uri = out_target_uri;
|
||||
data.out_data = out_data;
|
||||
data.loop = loop;
|
||||
data.error = error;
|
||||
*fetching_sync_uri = _ostree_metalink_get_uri (self);
|
||||
|
||||
request->metalink = g_object_ref (self);
|
||||
request->urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free);
|
||||
request->task = task; /* Unowned */
|
||||
|
||||
request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL);
|
||||
|
||||
g_task_set_task_data (task, request, ostree_metalink_request_unref);
|
||||
_ostree_fetcher_stream_uri_async (self->fetcher, self->uri,
|
||||
self->max_size, cancellable,
|
||||
on_retrieved_metalink, task);
|
||||
g_main_loop_run (loop);
|
||||
return data.success;
|
||||
}
|
||||
|
||||
SoupURI *
|
||||
_ostree_metalink_get_uri (OstreeMetalink *self)
|
||||
{
|
||||
|
@ -50,17 +50,13 @@ OstreeMetalink *_ostree_metalink_new (OstreeFetcher *fetcher,
|
||||
|
||||
SoupURI *_ostree_metalink_get_uri (OstreeMetalink *self);
|
||||
|
||||
void _ostree_metalink_request_async (OstreeMetalink *self,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
|
||||
gboolean _ostree_metalink_request_finish (OstreeMetalink *self,
|
||||
GAsyncResult *result,
|
||||
SoupURI **out_target_uri,
|
||||
GFile **out_data,
|
||||
GError **error);
|
||||
|
||||
gboolean _ostree_metalink_request_sync (OstreeMetalink *self,
|
||||
GMainLoop *loop,
|
||||
SoupURI **out_target_uri,
|
||||
GFile **out_data,
|
||||
SoupURI **fetching_sync_uri,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
||||
|
@ -303,49 +303,6 @@ fetch_uri_contents_utf8_sync (OtPullData *pull_data,
|
||||
return ret;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
OtPullData *pull_data;
|
||||
SoupURI **out_target_uri;
|
||||
GFile **out_data;
|
||||
gboolean success;
|
||||
} FetchMetalinkSyncData;
|
||||
|
||||
static void
|
||||
on_metalink_fetched (GObject *src,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
FetchMetalinkSyncData *data = user_data;
|
||||
|
||||
data->success = _ostree_metalink_request_finish ((OstreeMetalink*)src, result,
|
||||
data->out_target_uri, data->out_data,
|
||||
data->pull_data->async_error);
|
||||
g_main_loop_quit (data->pull_data->loop);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
request_metalink_sync (OtPullData *pull_data,
|
||||
OstreeMetalink *metalink,
|
||||
SoupURI **out_target_uri,
|
||||
GFile **out_data,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
FetchMetalinkSyncData data = { 0, };
|
||||
|
||||
data.pull_data = pull_data;
|
||||
data.out_target_uri = out_target_uri;
|
||||
data.out_data = out_data;
|
||||
|
||||
pull_data->fetching_sync_uri = _ostree_metalink_get_uri (metalink);
|
||||
_ostree_metalink_request_async (metalink, cancellable, on_metalink_fetched, &data);
|
||||
|
||||
g_main_loop_run (pull_data->loop);
|
||||
|
||||
return data.success;
|
||||
}
|
||||
|
||||
static void
|
||||
enqueue_one_object_request (OtPullData *pull_data,
|
||||
const char *checksum,
|
||||
@ -1387,8 +1344,13 @@ ostree_repo_pull_with_options (OstreeRepo *self,
|
||||
OSTREE_MAX_METADATA_SIZE, metalink_uri);
|
||||
soup_uri_free (metalink_uri);
|
||||
|
||||
if (!request_metalink_sync (pull_data, metalink, &target_uri, &metalink_data,
|
||||
cancellable, error))
|
||||
if (! _ostree_metalink_request_sync (metalink,
|
||||
pull_data->loop,
|
||||
&target_uri,
|
||||
&metalink_data,
|
||||
&pull_data->fetching_sync_uri,
|
||||
cancellable,
|
||||
error))
|
||||
goto out;
|
||||
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user