From 6b8a0a5ed01f79848da253ccabec2e901ccbeaa5 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Fri, 11 Sep 2020 16:54:54 +0200 Subject: [PATCH] Backport various OCI fixes from upstream --- 3845.patch | 26 ++++++++++++++++++++++++++ 3849.patch | 43 +++++++++++++++++++++++++++++++++++++++++++ 3850.patch | 32 ++++++++++++++++++++++++++++++++ flatpak.spec | 9 ++++++++- 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 3845.patch create mode 100644 3849.patch create mode 100644 3850.patch diff --git a/3845.patch b/3845.patch new file mode 100644 index 0000000..b9aeafb --- /dev/null +++ b/3845.patch @@ -0,0 +1,26 @@ +From 7ad549b89dfbfb67fd1cbbf6cafdd996e4722246 Mon Sep 17 00:00:00 2001 +From: "Owen W. Taylor" +Date: Wed, 9 Sep 2020 16:14:57 -0400 +Subject: [PATCH] OCI: extract appstream data for runtimes + +Runtimes also have appstream data - with description, license information, +and so forth, so we should extract the appstream data from the index +for refs that start with runtime/ as well. +--- + common/flatpak-oci-registry.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c +index cf501a5eb..0f7471129 100644 +--- a/common/flatpak-oci-registry.c ++++ b/common/flatpak-oci-registry.c +@@ -3120,7 +3120,8 @@ add_image_to_appstream (SoupSession *soup_session, + return; + + ref_parts = g_strsplit (ref, "/", -1); +- if (g_strv_length (ref_parts) != 4 || strcmp (ref_parts[0], "app") != 0) ++ if (g_strv_length (ref_parts) != 4 || ++ (strcmp (ref_parts[0], "app") != 0 && strcmp (ref_parts[0], "runtime") != 0)) + return; + + id = ref_parts[1]; diff --git a/3849.patch b/3849.patch new file mode 100644 index 0000000..a6b907f --- /dev/null +++ b/3849.patch @@ -0,0 +1,43 @@ +From 834c8d4524062349e36920ebefbd1c50b14a6c25 Mon Sep 17 00:00:00 2001 +From: Alexander Larsson +Date: Fri, 11 Sep 2020 16:24:23 +0200 +Subject: [PATCH] Don't loop authentincating if updating to the current version + +In case we need to authenticate for updates (in my test case i was +doing an OCI downgrade) we might need to download a commit object (or +in the OCI case a manifest json), so it did a request_required_tokens(), +but that noticed during the flatpak_transaction_normalize_ops() call +that the partial resolve to a particular commit actually was the +same as the local installed commit and marked op->skip = TRUE. + +However, when we got back to resolving the op again we didn't actually +look at the skip, so it kept looping wanting (but never doing) auth. + +The fix is to just directly resolve ops marked as skipped. +--- + common/flatpak-transaction.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c +index 410df8e54..9f9da23bd 100644 +--- a/common/flatpak-transaction.c ++++ b/common/flatpak-transaction.c +@@ -2765,6 +2765,18 @@ resolve_ops (FlatpakTransaction *self, + if (op->resolved) + continue; + ++ if (op->skip) ++ { ++ /* We're not yet resolved, but marked skip anyway, this can happen if during ++ * request_required_tokens() we were normalized away even though not fully resolved. ++ * For example we got the checksum but need to auth to get the commit, but the ++ * checksum we got was the version already installed. ++ */ ++ g_assert (op->resolved_commit != NULL); ++ mark_op_resolved (op, op->resolved_commit, NULL, NULL, NULL); ++ continue; ++ } ++ + if (op->kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + /* We resolve to the deployed metadata, because we need it to uninstall related ops */ diff --git a/3850.patch b/3850.patch new file mode 100644 index 0000000..099c068 --- /dev/null +++ b/3850.patch @@ -0,0 +1,32 @@ +From 6cf80f4703e57a819c6adc94b5a98b7c3e4c57d2 Mon Sep 17 00:00:00 2001 +From: Alexander Larsson +Date: Fri, 11 Sep 2020 16:47:05 +0200 +Subject: [PATCH] OCI: Fix progress reporting + +Somewhere during the progress reporting cleanup we lost the progress +for OCI pulls, this puts it back. +--- + common/flatpak-progress.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/common/flatpak-progress.c b/common/flatpak-progress.c +index e3b8338c5..a83bcf816 100644 +--- a/common/flatpak-progress.c ++++ b/common/flatpak-progress.c +@@ -428,6 +428,7 @@ flatpak_progress_update_oci_pull (FlatpakProgress *self, + if (self == NULL) + return; + ++ self->requested = n_layers; /* Need to set this to trigger start of progress reporting, see update_status_progress_and_estimating() */ + self->outstanding_fetches = n_layers - pulled_layers; + self->fetched_delta_parts = pulled_layers; + self->total_delta_parts = n_layers; +@@ -438,6 +439,8 @@ flatpak_progress_update_oci_pull (FlatpakProgress *self, + self->total_delta_part_usize = total_size; + self->total_delta_superblocks = 0; + update_status_progress_and_estimating (self); ++ ++ self->callback (self->status, self->progress, self->estimating, self->user_data); + } + + guint32 diff --git a/flatpak.spec b/flatpak.spec index 1b621b8..2513680 100644 --- a/flatpak.spec +++ b/flatpak.spec @@ -3,7 +3,7 @@ Name: flatpak Version: 1.8.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Application deployment framework for desktop apps License: LGPLv2+ @@ -11,6 +11,10 @@ URL: http://flatpak.org/ Source0: https://github.com/flatpak/flatpak/releases/download/%{version}/%{name}-%{version}.tar.xz # Add Fedora flatpak repositories Source1: flatpak-add-fedora-repos.service +# Various OCI fixes backported from upstream +Patch0: 3845.patch +Patch1: 3849.patch +Patch2: 3850.patch BuildRequires: pkgconfig(appstream-glib) BuildRequires: pkgconfig(dconf) @@ -266,6 +270,9 @@ fi %changelog +* Fri Sep 11 2020 Kalev Lember - 1.8.2-2 +- Backport various OCI fixes from upstream + * Fri Aug 21 2020 Kalev Lember - 1.8.2-1 - Update to 1.8.2