diff options
Diffstat (limited to 'libappstream-builder')
-rw-r--r-- | libappstream-builder/asb-package-ostree.c | 45 | ||||
-rw-r--r-- | libappstream-builder/asb-plugin.c | 5 |
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, "")); } |