repo: new function _ostree_preload_metadata_file
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
783e83c62c
commit
56f0ae6a4a
|
|
@ -1670,6 +1670,69 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_ostree_preload_metadata_file (OstreeRepo *self,
|
||||||
|
OstreeFetcher *fetcher,
|
||||||
|
SoupURI *base_uri,
|
||||||
|
const char *filename,
|
||||||
|
gboolean is_metalink,
|
||||||
|
GMainLoop *main_loop,
|
||||||
|
GBytes **out_bytes,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
if (is_metalink)
|
||||||
|
{
|
||||||
|
glnx_unref_object OstreeMetalink *metalink = NULL;
|
||||||
|
GError *local_error = NULL;
|
||||||
|
|
||||||
|
metalink = _ostree_metalink_new (fetcher, filename,
|
||||||
|
OSTREE_MAX_METADATA_SIZE,
|
||||||
|
base_uri);
|
||||||
|
|
||||||
|
_ostree_metalink_request_sync (metalink, main_loop,
|
||||||
|
NULL, out_bytes, NULL,
|
||||||
|
cancellable, &local_error);
|
||||||
|
|
||||||
|
if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
|
||||||
|
{
|
||||||
|
g_clear_error (&local_error);
|
||||||
|
*out_bytes = NULL;
|
||||||
|
}
|
||||||
|
else if (local_error != NULL)
|
||||||
|
{
|
||||||
|
g_propagate_error (error, local_error);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SoupURI *uri;
|
||||||
|
const char *base_path;
|
||||||
|
g_autofree char *path = NULL;
|
||||||
|
|
||||||
|
base_path = soup_uri_get_path (base_uri);
|
||||||
|
path = g_build_filename (base_path, filename, NULL);
|
||||||
|
uri = soup_uri_new_with_base (base_uri, path);
|
||||||
|
|
||||||
|
ret = _ostree_fetcher_request_uri_to_membuf (fetcher, uri,
|
||||||
|
FALSE, TRUE,
|
||||||
|
out_bytes,
|
||||||
|
main_loop,
|
||||||
|
OSTREE_MAX_METADATA_SIZE,
|
||||||
|
cancellable, error);
|
||||||
|
soup_uri_free (uri);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
repo_remote_fetch_summary (OstreeRepo *self,
|
repo_remote_fetch_summary (OstreeRepo *self,
|
||||||
const char *name,
|
const char *name,
|
||||||
|
|
@ -1717,51 +1780,16 @@ repo_remote_fetch_summary (OstreeRepo *self,
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (filenames); i++)
|
for (i = 0; i < G_N_ELEMENTS (filenames); i++)
|
||||||
{
|
{
|
||||||
if (metalink_url_string)
|
if (!_ostree_preload_metadata_file (self,
|
||||||
{
|
fetcher,
|
||||||
glnx_unref_object OstreeMetalink *metalink = NULL;
|
base_uri,
|
||||||
GError *local_error = NULL;
|
filenames[i],
|
||||||
|
metalink_url_string ? TRUE : FALSE,
|
||||||
metalink = _ostree_metalink_new (fetcher, filenames[i],
|
main_loop,
|
||||||
OSTREE_MAX_METADATA_SIZE,
|
outputs[i],
|
||||||
base_uri);
|
cancellable,
|
||||||
|
error))
|
||||||
_ostree_metalink_request_sync (metalink, main_loop,
|
goto out;
|
||||||
NULL, outputs[i], NULL,
|
|
||||||
cancellable, &local_error);
|
|
||||||
|
|
||||||
if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
|
|
||||||
{
|
|
||||||
g_clear_error (&local_error);
|
|
||||||
*outputs[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (local_error != NULL)
|
|
||||||
{
|
|
||||||
g_propagate_error (error, local_error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SoupURI *uri;
|
|
||||||
const char *base_path;
|
|
||||||
g_autofree char *path = NULL;
|
|
||||||
|
|
||||||
base_path = soup_uri_get_path (base_uri);
|
|
||||||
path = g_build_filename (base_path, filenames[i], NULL);
|
|
||||||
uri = soup_uri_new_with_base (base_uri, path);
|
|
||||||
|
|
||||||
ret = _ostree_fetcher_request_uri_to_membuf (fetcher, uri,
|
|
||||||
FALSE, TRUE,
|
|
||||||
outputs[i],
|
|
||||||
main_loop,
|
|
||||||
OSTREE_MAX_METADATA_SIZE,
|
|
||||||
cancellable, error);
|
|
||||||
soup_uri_free (uri);
|
|
||||||
|
|
||||||
if (!ret)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue