diff --git a/app/flatpak-transaction.c b/app/flatpak-transaction.c index f6583d64..a62e958c 100644 --- a/app/flatpak-transaction.c +++ b/app/flatpak-transaction.c @@ -357,6 +357,7 @@ ask_for_remote (FlatpakTransaction *self, const char **remotes) static gboolean add_related (FlatpakTransaction *self, + FlatpakRemoteState *state, const char *remote, const char *ref, GError **error) @@ -371,7 +372,7 @@ add_related (FlatpakTransaction *self, if (self->no_pull) related = flatpak_dir_find_local_related (self->dir, ref, remote, NULL, &local_error); else - related = flatpak_dir_find_remote_related (self->dir, ref, remote, NULL, &local_error); + related = flatpak_dir_find_remote_related (self->dir, state, ref, NULL, &local_error); if (related == NULL) { g_printerr (_("Warning: Problem looking for related refs: %s\n"), local_error->message); @@ -401,6 +402,7 @@ add_related (FlatpakTransaction *self, static gboolean add_deps (FlatpakTransaction *self, GKeyFile *metakey, + FlatpakRemoteState *state, const char *remote, const char *ref, GError **error) @@ -473,7 +475,7 @@ add_deps (FlatpakTransaction *self, } if (runtime_remote != NULL && - !add_related (self, runtime_remote, full_runtime_ref, error)) + !add_related (self, state, runtime_remote, full_runtime_ref, error)) return FALSE; return TRUE; @@ -607,13 +609,13 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, if (self->add_deps) { - if (!add_deps (self, metakey, remote, ref, error)) + if (!add_deps (self, metakey, state, remote, ref, error)) return FALSE; } flatpak_transaction_add_op (self, remote, ref, subpaths, commit, bundle, kind); - if (!add_related (self, remote, ref, error)) + if (!add_related (self, state, remote, ref, error)) return FALSE; return TRUE; diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index c21fdeba..4bd6a4e0 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -10806,8 +10806,8 @@ add_related (FlatpakDir *self, GPtrArray * flatpak_dir_find_remote_related (FlatpakDir *self, + FlatpakRemoteState *state, const char *ref, - const char *remote_name, GCancellable *cancellable, GError **error) { @@ -10817,18 +10817,13 @@ flatpak_dir_find_remote_related (FlatpakDir *self, g_auto(GStrv) parts = NULL; g_autoptr(GPtrArray) related = g_ptr_array_new_with_free_func ((GDestroyNotify)flatpak_related_free); g_autofree char *url = NULL; - g_autoptr(FlatpakRemoteState) state = NULL; parts = flatpak_decompose_ref (ref, error); if (parts == NULL) return NULL; - state = flatpak_dir_get_remote_state (self, remote_name, cancellable, error); - if (state == NULL) - return NULL; - if (!ostree_repo_remote_get_url (self->repo, - remote_name, + state->remote, &url, error)) return FALSE; @@ -10894,18 +10889,22 @@ flatpak_dir_find_remote_related (FlatpakDir *self, extension_ref = g_build_filename ("runtime", extension, parts[2], branch, NULL); - if (flatpak_summary_lookup_ref (state->summary, extension_collection_id, extension_ref, &checksum, NULL)) + checksum = flatpak_remote_state_lookup_ref (state, extension_ref, NULL, NULL); + if (checksum) { - add_related (self, related, extension, extension_collection_id, extension_ref, checksum, no_autodownload, download_if, autodelete, locale_subset); + add_related (self, related, extension, extension_collection_id, extension_ref, checksum, + no_autodownload, download_if, autodelete, locale_subset); } else if (subdirectories) { - g_auto(GStrv) refs = flatpak_summary_match_subrefs (state->summary, extension_collection_id, extension_ref); + g_auto(GStrv) refs = flatpak_remote_state_match_subrefs (state, extension_ref); int j; for (j = 0; refs[j] != NULL; j++) { - if (flatpak_summary_lookup_ref (state->summary, extension_collection_id, refs[j], &checksum, NULL)) - add_related (self, related, extension, extension_collection_id, refs[j], checksum, no_autodownload, download_if, autodelete, locale_subset); + g_autofree char *subref_checksum = flatpak_remote_state_lookup_ref (state, refs[j], NULL, NULL); + if (subref_checksum) + add_related (self, related, extension, extension_collection_id, refs[j], subref_checksum, + no_autodownload, download_if, autodelete, locale_subset); } } } diff --git a/common/flatpak-dir.h b/common/flatpak-dir.h index ae8f765c..12d924b5 100644 --- a/common/flatpak-dir.h +++ b/common/flatpak-dir.h @@ -691,7 +691,7 @@ FlatpakRemoteState * flatpak_dir_get_remote_state_optional (FlatpakDir *self, GCancellable *cancellable, GError **error); GPtrArray * flatpak_dir_find_remote_related (FlatpakDir *dir, - const char *remote_name, + FlatpakRemoteState *state, const char *ref, GCancellable *cancellable, GError **error); diff --git a/lib/flatpak-installation.c b/lib/flatpak-installation.c index 4ead8b2f..a0fe8fc6 100644 --- a/lib/flatpak-installation.c +++ b/lib/flatpak-installation.c @@ -2264,13 +2264,18 @@ flatpak_installation_list_remote_related_refs_sync (FlatpakInstallation *self, g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GPtrArray) related = NULL; g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); + g_autoptr(FlatpakRemoteState) state = NULL; int i; dir = flatpak_installation_get_dir (self, error); if (dir == NULL) return NULL; - related = flatpak_dir_find_remote_related (dir, ref, remote_name, + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, error); + if (state == NULL) + return NULL; + + related = flatpak_dir_find_remote_related (dir, state, ref, cancellable, error); if (related == NULL) return NULL;