summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2016-01-14 20:49:43 +0000
committerRichard Hughes <richard@hughsie.com>2016-01-14 20:49:43 +0000
commit2ad9f60d6d4d8b399c9afda336bd28dfa3e9a77f (patch)
tree6fb3801cc94d37949b0a242a41cbcffd796ab37d
parent7c4d511f1e1c01670a9e6551470698caf5ec2ee9 (diff)
parent1fef14f71b7e37304de2214fe8ff64b2f2d883b1 (diff)
downloadappstream-glib-2ad9f60d6d4d8b399c9afda336bd28dfa3e9a77f.tar.gz
Merge pull request #78 from alexlarsson/xdg-app
Xdg app fixes and changes
-rw-r--r--libappstream-builder/asb-package-ostree.c50
-rw-r--r--libappstream-builder/asb-plugin.c5
2 files changed, 33 insertions, 22 deletions
diff --git a/libappstream-builder/asb-package-ostree.c b/libappstream-builder/asb-package-ostree.c
index 315460f..3519f8c 100644
--- a/libappstream-builder/asb-package-ostree.c
+++ b/libappstream-builder/asb-package-ostree.c
@@ -30,6 +30,7 @@
#include "config.h"
#include <ostree.h>
+#include <string.h>
#include "asb-package-ostree.h"
#include "asb-plugin.h"
@@ -44,6 +45,8 @@ G_DEFINE_TYPE_WITH_PRIVATE (AsbPackageOstree, asb_package_ostree, ASB_TYPE_PACKA
#define GET_PRIVATE(o) (asb_package_ostree_get_instance_private (o))
+static gboolean asb_package_ostree_ensure_nevra (AsbPackage *pkg, GError **error);
+
/**
* asb_package_ostree_finalize:
**/
@@ -88,6 +91,9 @@ asb_package_ostree_open (AsbPackage *pkg, const gchar *filename, GError **error)
AsbPackageOstreePrivate *priv = GET_PRIVATE (pkg_ostree);
g_autoptr(GFile) file = NULL;
+ if (!asb_package_ostree_ensure_nevra (pkg, error))
+ return FALSE;
+
/* create the OstreeRepo */
file = g_file_new_for_path (priv->repodir);
priv->repo = ostree_repo_new (file);
@@ -110,7 +116,8 @@ asb_package_ostree_build_filelist (GPtrArray *array, GFile *file, GError **error
if (enumerator == NULL)
return FALSE;
do {
- g_autofree gchar *path = NULL;
+ g_autofree gchar *dir = NULL;
+ gchar *path;
g_autoptr(GFileInfo) info = NULL;
info = g_file_enumerator_next_file (enumerator, NULL, error);
@@ -121,8 +128,9 @@ asb_package_ostree_build_filelist (GPtrArray *array, GFile *file, GError **error
}
/* recurse if directory */
- path = g_file_get_path (file);
- g_ptr_array_add (array, g_build_filename (path, g_file_info_get_name (info), NULL));
+ dir = g_file_get_path (file);
+ path = g_build_filename ("/usr", dir + strlen ("/export"), g_file_info_get_name (info), NULL);
+ g_ptr_array_add (array, path);
if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) {
g_autoptr(GFile) child = NULL;
child = g_file_get_child (g_file_enumerator_get_container (enumerator),
@@ -144,6 +152,7 @@ asb_package_ostree_ensure_files (AsbPackage *pkg, GError **error)
AsbPackageOstreePrivate *priv = GET_PRIVATE (pkg_ostree);
const gchar *rev;
g_autoptr(GFile) root = NULL;
+ g_autoptr(GFile) export = NULL;
g_autoptr(GPtrArray) array = NULL;
/* get the filelist */
@@ -152,10 +161,11 @@ asb_package_ostree_ensure_files (AsbPackage *pkg, GError **error)
rev = asb_package_get_source (pkg);
if (!ostree_repo_read_commit (priv->repo, rev, &root, NULL, NULL, error))
return FALSE;
-
+ export = g_file_get_child (root, "export");
/* build an array */
array = g_ptr_array_new_with_free_func (g_free);
- if (!asb_package_ostree_build_filelist (array, root, error))
+ if (g_file_query_exists (export, NULL) &&
+ !asb_package_ostree_build_filelist (array, export, error))
return FALSE;
g_ptr_array_add (array, NULL);
asb_package_set_filelist (pkg, (gchar **) array->pdata);
@@ -233,9 +243,11 @@ asb_package_ostree_explode (AsbPackage *pkg, const gchar *dir,
g_autofree gchar *resolved_commit = NULL;
g_autoptr(GFileInfo) file_info = NULL;
g_autoptr(GFile) root = NULL;
+ g_autoptr(GFile) export = NULL;
g_autoptr(GFile) target = NULL;
+ g_autoptr(GFile) usr = NULL;
- /* extract root */
+ /* extract files */
commit = asb_package_get_source (pkg);
if (!ostree_repo_resolve_rev (priv->repo, commit, FALSE,
&resolved_commit, error))
@@ -243,17 +255,21 @@ asb_package_ostree_explode (AsbPackage *pkg, const gchar *dir,
if (!ostree_repo_read_commit (priv->repo, resolved_commit,
&root, NULL, NULL, error))
return FALSE;
- file_info = g_file_query_info (root, "standard::*",
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- NULL, error);
- if (file_info == NULL)
- return FALSE;
- target = g_file_new_for_path (dir);
- if (!ostree_repo_checkout_tree (priv->repo, OSTREE_REPO_CHECKOUT_MODE_USER,
- OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES,
- target, OSTREE_REPO_FILE (root),
- file_info, NULL, error))
- return FALSE;
+ export = g_file_get_child (root, "export");
+ file_info = g_file_query_info (export, "standard::*",
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ NULL, error);
+ if (file_info != NULL) {
+ target = g_file_new_for_path (dir);
+ usr = g_file_get_child (target, "usr");
+ if (!g_file_make_directory (usr, NULL, error))
+ return FALSE;
+ if (!ostree_repo_checkout_tree (priv->repo, OSTREE_REPO_CHECKOUT_MODE_USER,
+ OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES,
+ usr, OSTREE_REPO_FILE (export),
+ file_info, NULL, error))
+ return FALSE;
+ }
return TRUE;
}
diff --git a/libappstream-builder/asb-plugin.c b/libappstream-builder/asb-plugin.c
index 3a8fb99..3ba36b8 100644
--- a/libappstream-builder/asb-plugin.c
+++ b/libappstream-builder/asb-plugin.c
@@ -103,11 +103,6 @@ void
asb_plugin_add_glob (GPtrArray *array, const gchar *glob)
{
/* handle bundles automatically */
- if (g_str_has_prefix (glob, "/usr/")) {
- g_autofree gchar *glob_bundle = NULL;
- glob_bundle = g_strdup_printf ("/files/%s", glob + 5);
- g_ptr_array_add (array, asb_glob_value_new (glob_bundle, ""));
- }
g_ptr_array_add (array, asb_glob_value_new (glob, ""));
}