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.
tingping/wmclass
Alexander Larsson 2016-10-27 10:12:13 +02:00
parent 2641504d5b
commit a709be6021
2 changed files with 44 additions and 3 deletions

View File

@ -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,

View File

@ -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);