summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-01-14 20:28:25 +0100
committerAlexander Larsson <alexl@redhat.com>2016-01-14 20:28:25 +0100
commit1fef14f71b7e37304de2214fe8ff64b2f2d883b1 (patch)
treef6f5f86195a364e6a79d928491b9eaa5a33299fa
parente9033395cea3ba80ebfc7c398d841e8d7aa2ca86 (diff)
downloadappstream-glib-1fef14f71b7e37304de2214fe8ff64b2f2d883b1.tar.gz
asb-package-ostree: Fix things up for xdg-app use
We only extract stuff from /export in order to not pick up e.g. bundled desktop files not part of the app. Also, we extract to a "usr" subdir instead of "export" to make appstream-builder pick things up automatically (also remove the previous hack that handled this by rewriting globs).
-rw-r--r--libappstream-builder/asb-package-ostree.c45
-rw-r--r--libappstream-builder/asb-plugin.c5
2 files changed, 28 insertions, 22 deletions
diff --git a/libappstream-builder/asb-package-ostree.c b/libappstream-builder/asb-package-ostree.c
index f75ea6e..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"
@@ -115,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);
@@ -126,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),
@@ -149,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 */
@@ -157,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);
@@ -238,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))
@@ -248,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, ""));
}