[gnome-builder/gnome-builder-3-40] flatpak: resolve sdk extensions before displaying



commit 6f617c651e4185391e8b198df1a404da99225174
Author: Christian Hergert <chergert redhat com>
Date:   Fri Apr 23 15:17:13 2021 -0700

    flatpak: resolve sdk extensions before displaying
    
    This makes it easier to see what the version of SDK extension will be
    before installing it. It also ensures that we check for the resolved
    version so that an install etensions that doesn't match the desired
    branch does not cause us to miss installing the extension.
    
    Fixes #1437

 src/plugins/flatpak/gbp-flatpak-runtime-provider.c | 55 +++++++++++++++-------
 1 file changed, 38 insertions(+), 17 deletions(-)
---
diff --git a/src/plugins/flatpak/gbp-flatpak-runtime-provider.c 
b/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
index cb5c5b129..dc92e14d8 100644
--- a/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
+++ b/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
@@ -814,38 +814,59 @@ gbp_flatpak_runtime_provider_bootstrap_async (IdeRuntimeProvider  *provider,
     {
       g_auto(GStrv) all = NULL;
       g_autofree gchar *sdk_full = NULL;
+      g_autofree gchar *platform_full = NULL;
+      const char * const *sdk_extensions;
       const gchar *sdk;
+      const gchar *platform;
 
       /* Tell the dialog about the SDK so it can resolve common ancestors for
        * SDK extensions missing a branch name.
        */
+      platform = gbp_flatpak_manifest_get_platform (GBP_FLATPAK_MANIFEST (state->config));
+      platform_full = g_strdup_printf ("%s/%s/%s", platform, state->arch, state->branch);
       sdk = gbp_flatpak_manifest_get_sdk (GBP_FLATPAK_MANIFEST (state->config));
       sdk_full = g_strdup_printf ("%s/%s/%s", sdk, state->arch, state->branch);
+      sdk_extensions = gbp_flatpak_manifest_get_sdk_extensions (GBP_FLATPAK_MANIFEST (state->config));
+
       gbp_flatpak_install_dialog_set_sdk (dialog, sdk_full);
 
-      all = gbp_flatpak_manifest_get_runtimes (GBP_FLATPAK_MANIFEST (state->config),
-                                               state->arch);
+      /* Make sure we have the SDK installed (org.gnome.Sdk) */
+      if (!gbp_flatpak_application_addin_has_runtime (addin, sdk, state->arch, state->branch))
+        gbp_flatpak_install_dialog_add_runtime (dialog, sdk_full);
+
+      /* Make sure we have the platform for running it too (org.gnome.Platform) */
+      if (!gbp_flatpak_application_addin_has_runtime (addin, platform, state->arch, state->branch))
+        gbp_flatpak_install_dialog_add_runtime (dialog, platform);
 
-      if (all != NULL)
+      /* Resolve the extensions ASAP so we can show them in the dialog and also
+       * ensure that we have the right extension for the SDK.
+       */
+      for (guint i = 0; sdk_extensions[i]; i++)
         {
-          for (guint i = 0; all[i]; i++)
+          g_autofree char *resolved = gbp_flatpak_application_addin_resolve_extension (addin, sdk_full, 
sdk_extensions[i]);
+
+          if (resolved == NULL)
             {
-              g_autofree gchar *item_name = NULL;
-              g_autofree gchar *item_arch = NULL;
-              g_autofree gchar *item_branch = NULL;
-
-              if (gbp_flatpak_split_id (all[i], &item_name, &item_arch, &item_branch))
-                {
-                  if (!gbp_flatpak_application_addin_has_runtime (addin, item_name, item_arch, item_branch))
-                    gbp_flatpak_install_dialog_add_runtime (dialog, all[i]);
-                }
+              gbp_flatpak_install_dialog_add_runtime (dialog, sdk_extensions[i]);
+            }
+          else
+            {
+              g_autofree char *resolved_id = NULL;
+              g_autofree char *resolved_arch = NULL;
+              g_autofree char *resolved_branch = NULL;
+
+              if (gbp_flatpak_split_id (resolved, &resolved_id, &resolved_arch, &resolved_branch) &&
+                  !gbp_flatpak_application_addin_has_runtime (addin, resolved_id, resolved_arch, 
resolved_branch))
+                gbp_flatpak_install_dialog_add_runtime (dialog, resolved);
             }
         }
     }
-
-  /* Add runtime specifically (in case no manifest is set) */
-  if (!gbp_flatpak_application_addin_has_runtime (addin, state->name, state->arch, state->branch))
-    gbp_flatpak_install_dialog_add_runtime_full (dialog, state->name, state->arch, state->branch);
+  else
+    {
+      /* Add runtime specifically (in case no manifest is set) */
+      if (!gbp_flatpak_application_addin_has_runtime (addin, state->name, state->arch, state->branch))
+        gbp_flatpak_install_dialog_add_runtime_full (dialog, state->name, state->arch, state->branch);
+    }
 
   runtimes = gbp_flatpak_install_dialog_get_runtimes (dialog);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]