[gnome-builder] flatpak: resolve branch for SDK extensions
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] flatpak: resolve branch for SDK extensions
- Date: Tue, 2 Mar 2021 23:41:09 +0000 (UTC)
commit 5638f4b8c1d7bad7fe333619f8cf1eb81c67d717
Author: Christian Hergert <chergert redhat com>
Date: Tue Mar 2 15:40:53 2021 -0800
flatpak: resolve branch for SDK extensions
In case we don't get a branch for the SDK extension (which is incredibly
common these days), we need to resolve it painstakingly.
This should improve work flows such as cloning a Rust-based GNOME project
and getting the Runtime installation dialog.
Fixes #1300
src/plugins/flatpak/gbp-flatpak-runtime-provider.c | 38 ++++++++++++++++++++++
1 file changed, 38 insertions(+)
---
diff --git a/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
b/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
index 1fa5c17e7..9b96a9fe8 100644
--- a/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
+++ b/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
@@ -643,6 +643,30 @@ gbp_flatpak_runtime_provider_bootstrap_install_cb (GObject *object,
gbp_flatpak_runtime_provider_bootstrap_complete (task);
}
+static gchar *
+resolve_extension_branch (GbpFlatpakRuntimeProvider *self,
+ const gchar *sdk,
+ const gchar *extension)
+{
+ GbpFlatpakApplicationAddin *addin;
+ g_autofree gchar *resolved = NULL;
+ g_autofree gchar *branch = NULL;
+
+ g_assert (GBP_IS_FLATPAK_RUNTIME_PROVIDER (self));
+ g_assert (extension != NULL);
+
+ if (extension == NULL)
+ return NULL;
+
+ addin = gbp_flatpak_application_addin_get_default ();
+ resolved = gbp_flatpak_application_addin_resolve_extension (addin, sdk, extension);
+
+ if (resolved == NULL || !gbp_flatpak_split_id (resolved, NULL, NULL, &branch))
+ return NULL;
+
+ return g_steal_pointer (&branch);
+}
+
static void
gbp_flatpak_runtime_provider_bootstrap_cb (GObject *object,
GAsyncResult *result,
@@ -655,6 +679,7 @@ gbp_flatpak_runtime_provider_bootstrap_cb (GObject *object,
g_auto(GStrv) runtimes = NULL;
IdeTransferManager *transfer_manager;
BootstrapState *state;
+ const gchar *sdk;
g_assert (IDE_IS_MAIN_THREAD ());
g_assert (GBP_IS_FLATPAK_INSTALL_DIALOG (dialog));
@@ -678,6 +703,7 @@ gbp_flatpak_runtime_provider_bootstrap_cb (GObject *object,
runtimes = gbp_flatpak_install_dialog_get_runtimes (dialog);
transfer_manager = ide_transfer_manager_get_default ();
+ sdk = gbp_flatpak_install_dialog_get_sdk (dialog);
for (guint i = 0; runtimes[i]; i++)
{
@@ -692,6 +718,9 @@ gbp_flatpak_runtime_provider_bootstrap_cb (GObject *object,
state->count++;
+ if (branch == NULL)
+ branch = resolve_extension_branch (self, sdk, name);
+
transfer = gbp_flatpak_transfer_new (name, arch, branch, FALSE);
notif = ide_transfer_create_notification (IDE_TRANSFER (transfer));
ide_notification_attach (notif, IDE_OBJECT (self));
@@ -779,6 +808,15 @@ gbp_flatpak_runtime_provider_bootstrap_async (IdeRuntimeProvider *provider,
if (GBP_IS_FLATPAK_MANIFEST (state->config))
{
g_auto(GStrv) all = NULL;
+ g_autofree gchar *sdk_full = NULL;
+ const gchar *sdk;
+
+ /* Tell the dialog about the SDK so it can resolve common ancestors for
+ * SDK extensions missing a branch name.
+ */
+ sdk = gbp_flatpak_manifest_get_sdk (GBP_FLATPAK_MANIFEST (state->config));
+ sdk_full = g_strdup_printf ("%s/%s/%s", sdk, state->arch, state->branch);
+ gbp_flatpak_install_dialog_set_sdk (dialog, sdk_full);
all = gbp_flatpak_manifest_get_runtimes (GBP_FLATPAK_MANIFEST (state->config),
state->arch);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]