[gnome-builder] flatpak: add helper to locate deploy dir for a runtime by id



commit b4684968d1df69863f5994e4b0f1c8bfc94aa68d
Author: Christian Hergert <chergert redhat com>
Date:   Thu Feb 16 11:39:10 2017 -0800

    flatpak: add helper to locate deploy dir for a runtime by id
    
    This is useful when we need to discover the deploy dir for a runtime by
    id which happens when we need the SDK deploy dir instead of the platform
    deploy dir.

 plugins/flatpak/gbp-flatpak-application-addin.c |   54 +++++++++++++++++++++++
 plugins/flatpak/gbp-flatpak-application-addin.h |    4 ++
 2 files changed, 58 insertions(+), 0 deletions(-)
---
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.c b/plugins/flatpak/gbp-flatpak-application-addin.c
index 1ecfdd1..9652a28 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.c
+++ b/plugins/flatpak/gbp-flatpak-application-addin.c
@@ -918,3 +918,57 @@ gbp_flatpak_application_addin_locate_sdk_finish (GbpFlatpakApplicationAddin  *se
 
   IDE_RETURN (ret);
 }
+
+static FlatpakInstalledRef *
+gbp_flatpak_application_addin_find_ref (GbpFlatpakApplicationAddin *self,
+                                        const gchar                *id,
+                                        const gchar                *arch,
+                                        const gchar                *branch)
+{
+  for (guint i = 0; i < self->installations->len; i++)
+    {
+      InstallInfo *info = g_ptr_array_index (self->installations, i);
+      g_autoptr(GPtrArray) ar = NULL;
+
+      ar = flatpak_installation_list_installed_refs_by_kind (info->installation,
+                                                             FLATPAK_REF_KIND_RUNTIME,
+                                                             NULL,
+                                                             NULL);
+
+      if (ar != NULL)
+        {
+          for (guint j = 0; j < ar->len; j++)
+            {
+              FlatpakRef *ref = g_ptr_array_index (ar, j);
+
+              if (g_strcmp0 (id, flatpak_ref_get_name (ref)) == 0 &&
+                  g_strcmp0 (arch, flatpak_ref_get_arch (ref)) == 0 &&
+                  g_strcmp0 (branch, flatpak_ref_get_branch (ref)) == 0)
+                return g_object_ref (ref);
+            }
+        }
+    }
+
+  return NULL;
+}
+
+gchar *
+gbp_flatpak_application_addin_get_deploy_dir (GbpFlatpakApplicationAddin *self,
+                                              const gchar                *id,
+                                              const gchar                *arch,
+                                              const gchar                *branch)
+{
+  g_autoptr(FlatpakInstalledRef) ref = NULL;
+
+  g_return_val_if_fail (GBP_IS_FLATPAK_APPLICATION_ADDIN (self), NULL);
+  g_return_val_if_fail (id, NULL);
+  g_return_val_if_fail (arch, NULL);
+  g_return_val_if_fail (branch, NULL);
+
+  ref = gbp_flatpak_application_addin_find_ref (self, id, arch, branch);
+
+  if (ref != NULL)
+    return g_strdup (flatpak_installed_ref_get_deploy_dir (ref));
+
+  return NULL;
+}
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.h b/plugins/flatpak/gbp-flatpak-application-addin.h
index 69f23e3..1e5cd27 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.h
+++ b/plugins/flatpak/gbp-flatpak-application-addin.h
@@ -58,6 +58,10 @@ gboolean                    gbp_flatpak_application_addin_locate_sdk_finish
                                                                                   gchar                      
**sdk_arch,
                                                                                   gchar                      
**sdk_branch,
                                                                                   GError                     
**error);
+gchar                      *gbp_flatpak_application_addin_get_deploy_dir         (GbpFlatpakApplicationAddin 
 *self,
+                                                                                  const gchar                
 *id,
+                                                                                  const gchar                
 *arch,
+                                                                                  const gchar                
 *branch);
 
 G_END_DECLS
 


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