summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2015-07-23 13:34:58 +0200
committerColin Walters <walters@verbum.org>2015-07-24 12:37:42 -0400
commit56f0ae6a4af0eeb164334897ccad7960ff6b42b2 (patch)
tree65ef7f07dbc4aeffc74a49e5ddb0b379bfe11cbb
parent783e83c62c5b73aed92de7eb82698699ce04f88b (diff)
downloadostree-56f0ae6a4af0eeb164334897ccad7960ff6b42b2.tar.gz
repo: new function _ostree_preload_metadata_file
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r--src/libostree/ostree-repo.c118
1 files changed, 73 insertions, 45 deletions
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index c83d880e..31c3b68c 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -1671,6 +1671,69 @@ out:
}
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
repo_remote_fetch_summary (OstreeRepo *self,
const char *name,
const char *metalink_url_string,
@@ -1717,51 +1780,16 @@ repo_remote_fetch_summary (OstreeRepo *self,
for (i = 0; i < G_N_ELEMENTS (filenames); i++)
{
- if (metalink_url_string)
- {
- glnx_unref_object OstreeMetalink *metalink = NULL;
- GError *local_error = NULL;
-
- metalink = _ostree_metalink_new (fetcher, filenames[i],
- OSTREE_MAX_METADATA_SIZE,
- base_uri);
-
- _ostree_metalink_request_sync (metalink, main_loop,
- 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;
- }
+ if (!_ostree_preload_metadata_file (self,
+ fetcher,
+ base_uri,
+ filenames[i],
+ metalink_url_string ? TRUE : FALSE,
+ main_loop,
+ outputs[i],
+ cancellable,
+ error))
+ goto out;
}
ret = TRUE;