From a709be602163b118bf6122a0a65ce0479ef9c729 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 27 Oct 2016 10:12:13 +0200 Subject: [PATCH] install --from: Try to reuse existing remotes We don't really need to create an origin remote if the same uri is already there for an enumeratable remote, we can just reuse that. Having multiple remotes for a single repository just means we'll be downloading the summary file multiple times. --- common/flatpak-dir.c | 45 +++++++++++++++++++++++++++++++++++++++++--- common/flatpak-dir.h | 2 ++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 0f259065..f1b71543 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -5764,16 +5764,55 @@ flatpak_dir_create_remote_for_ref_file (FlatpakDir *self, return FALSE; } - remote = flatpak_dir_create_origin_remote (self, url, name, title, ref, - gpg_data, NULL, error); + /* First try to reuse existing remote */ + remote = flatpak_dir_find_remote_by_uri (self, url); + if (remote == NULL) - return FALSE; + { + remote = flatpak_dir_create_origin_remote (self, url, name, title, ref, + gpg_data, NULL, error); + if (remote == NULL) + return FALSE; + } *remote_name_out = g_steal_pointer (&remote); *ref_out = (char *)g_steal_pointer (&ref); return TRUE; } +char * +flatpak_dir_find_remote_by_uri (FlatpakDir *self, + const char *uri) +{ + g_auto(GStrv) remotes = NULL; + + if (!flatpak_dir_ensure_repo (self, NULL, NULL)) + return NULL; + + remotes = flatpak_dir_list_enumerated_remotes (self, NULL, NULL); + if (remotes) + { + int i; + + for (i = 0; remotes != NULL && remotes[i] != NULL; i++) + { + const char *remote = remotes[i]; + g_autofree char *remote_uri = NULL; + + if (!ostree_repo_remote_get_url (self->repo, + remote, + &remote_uri, + NULL)) + continue; + + if (strcmp (uri, remote_uri) == 0) + return g_strdup (remote); + } + } + + return NULL; +} + char ** flatpak_dir_list_remotes (FlatpakDir *self, GCancellable *cancellable, diff --git a/common/flatpak-dir.h b/common/flatpak-dir.h index ed8375e4..e663de31 100644 --- a/common/flatpak-dir.h +++ b/common/flatpak-dir.h @@ -424,6 +424,8 @@ gboolean flatpak_dir_create_remote_for_ref_file (FlatpakDir *self, char **ref_out, GError **error); +char *flatpak_dir_find_remote_by_uri (FlatpakDir *self, + const char *uri); char **flatpak_dir_list_remotes (FlatpakDir *self, GCancellable *cancellable, GError **error);