From 73defceec6f8e62fffc6f312cd4e40e770265d1c Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 25 Feb 2016 18:26:40 +0100 Subject: [PATCH] common: Break out xml appstream rewriting to helper functions --- common/xdg-app-utils.c | 75 ++++++++++++++++++++++++++---------------- common/xdg-app-utils.h | 17 +++++++--- 2 files changed, 58 insertions(+), 34 deletions(-) diff --git a/common/xdg-app-utils.c b/common/xdg-app-utils.c index 1dd6e8e3..0c8d9241 100644 --- a/common/xdg-app-utils.c +++ b/common/xdg-app-utils.c @@ -1635,14 +1635,15 @@ validate_component (XdgAppXml *component, return TRUE; } -static gboolean -migrate_xml (XdgAppXml *root, - XdgAppXml *appstream, - const char *ref, - const char *id, - GKeyFile *metadata) +gboolean +xdg_app_appstream_xml_migrate (XdgAppXml *source, + XdgAppXml *dest, + const char *ref, + const char *id, + GKeyFile *metadata) { - XdgAppXml *components; + XdgAppXml *source_components; + XdgAppXml *dest_components; XdgAppXml *component; XdgAppXml *prev_component; gboolean migrated = FALSE; @@ -1651,9 +1652,9 @@ migrate_xml (XdgAppXml *root, g_autofree const char *sdk = NULL; const char *group; - if (root->first_child == NULL || - root->first_child->next_sibling != NULL || - g_strcmp0 (root->first_child->element_name, "components") != 0) + if (source->first_child == NULL || + source->first_child->next_sibling != NULL || + g_strcmp0 (source->first_child->element_name, "components") != 0) return FALSE; if (g_str_has_prefix (ref, "app/")) @@ -1665,9 +1666,10 @@ migrate_xml (XdgAppXml *root, runtime = g_key_file_get_string (metadata, group, "runtime", NULL); sdk = g_key_file_get_string (metadata, group, "sdk", NULL); - components = root->first_child; + source_components = source->first_child; + dest_components = dest->first_child; - component = components->first_child; + component = source_components->first_child; prev_component = NULL; while (component != NULL) { @@ -1675,7 +1677,8 @@ migrate_xml (XdgAppXml *root, if (validate_component (component, ref, id, tags, runtime, sdk)) { - xdg_app_xml_add (appstream, xdg_app_xml_unlink (component, prev_component)); + xdg_app_xml_add (dest_components, + xdg_app_xml_unlink (component, prev_component)); migrated = TRUE; } else @@ -1731,7 +1734,7 @@ copy_icon (const char *id, static gboolean extract_appstream (OstreeRepo *repo, - XdgAppXml *appstream_components, + XdgAppXml *appstream_root, const char *ref, const char *id, GFile *dest, @@ -1776,7 +1779,8 @@ extract_appstream (OstreeRepo *repo, if (xml_root == NULL) return FALSE; - if (migrate_xml (xml_root, appstream_components, ref, id, keyfile)) + if (xdg_app_appstream_xml_migrate (xml_root, appstream_root, + ref, id, keyfile)) { g_autoptr(GError) my_error = NULL; if (!copy_icon (id, root, dest, "64x64", &my_error)) @@ -1794,6 +1798,28 @@ extract_appstream (OstreeRepo *repo, return TRUE; } +XdgAppXml * +xdg_app_appstream_xml_new (void) +{ + XdgAppXml *appstream_root = NULL; + XdgAppXml *appstream_components; + + appstream_root = xdg_app_xml_new ("root"); + appstream_components = xdg_app_xml_new ("components"); + xdg_app_xml_add (appstream_root, appstream_components); + xdg_app_xml_add (appstream_components, xdg_app_xml_new_text ("\n ")); + + appstream_components->attribute_names = g_new0 (char *, 3); + appstream_components->attribute_values = g_new0 (char *, 3); + appstream_components->attribute_names[0] = g_strdup ("version"); + appstream_components->attribute_values[0] = g_strdup ("0.8"); + appstream_components->attribute_names[1] = g_strdup ("origin"); + appstream_components->attribute_values[1] = g_strdup ("xdg-app"); + + return appstream_root; +} + + gboolean xdg_app_repo_generate_appstream (OstreeRepo *repo, const char **gpg_key_ids, @@ -1848,7 +1874,6 @@ xdg_app_repo_generate_appstream (OstreeRepo *repo, g_autofree char *parent = NULL; g_autofree char *branch = NULL; g_autoptr(XdgAppXml) appstream_root = NULL; - XdgAppXml *appstream_components; g_autoptr(GString) xml = NULL; g_autoptr(GZlibCompressor) compressor = NULL; g_autoptr(GOutputStream) out2 = NULL; @@ -1859,17 +1884,7 @@ xdg_app_repo_generate_appstream (OstreeRepo *repo, tmpdir_file = g_file_new_for_path (tmpdir); - appstream_root = xdg_app_xml_new ("root"); - appstream_components = xdg_app_xml_new ("components"); - xdg_app_xml_add (appstream_root, appstream_components); - xdg_app_xml_add (appstream_components, xdg_app_xml_new_text ("\n ")); - - appstream_components->attribute_names = g_new0 (char *, 3); - appstream_components->attribute_values = g_new0 (char *, 3); - appstream_components->attribute_names[0] = g_strdup ("version"); - appstream_components->attribute_values[0] = g_strdup ("0.8"); - appstream_components->attribute_names[1] = g_strdup ("origin"); - appstream_components->attribute_values[1] = g_strdup ("xdg-app"); + appstream_root = xdg_app_appstream_xml_new (); g_hash_table_iter_init (&iter2, all_refs); while (g_hash_table_iter_next (&iter2, &key, &value)) @@ -1885,14 +1900,16 @@ xdg_app_repo_generate_appstream (OstreeRepo *repo, if (strcmp (split[2], arch) != 0) continue; - if (!extract_appstream (repo, appstream_components, ref, split[1], tmpdir_file, cancellable, &my_error)) + if (!extract_appstream (repo, appstream_root, + ref, split[1], tmpdir_file, + cancellable, &my_error)) { g_print ("No appstream data for %s\n", ref); continue; } } - xdg_app_xml_add (appstream_components, xdg_app_xml_new_text ("\n")); + xdg_app_xml_add (appstream_root->first_child, xdg_app_xml_new_text ("\n")); xml = g_string_new (""); xdg_app_xml_to_string (appstream_root, xml); diff --git a/common/xdg-app-utils.h b/common/xdg-app-utils.h index a419ccce..88799c29 100644 --- a/common/xdg-app-utils.h +++ b/common/xdg-app-utils.h @@ -178,11 +178,6 @@ gboolean xdg_app_repo_update (OstreeRepo *repo, const char *gpg_homedir, GCancellable *cancellable, GError **error); -gboolean xdg_app_repo_generate_appstream (OstreeRepo *repo, - const char **gpg_key_ids, - const char *gpg_homedir, - GCancellable *cancellable, - GError **error); GVariant * xdg_app_bundle_load (GFile *file, char **commit, @@ -293,4 +288,16 @@ XdgAppXml *xdg_app_xml_find (XdgAppXml *node, G_DEFINE_AUTOPTR_CLEANUP_FUNC(XdgAppXml, xdg_app_xml_free); +XdgAppXml *xdg_app_appstream_xml_new (void); +gboolean xdg_app_appstream_xml_migrate (XdgAppXml *source, + XdgAppXml *dest, + const char *ref, + const char *id, + GKeyFile *metadata); +gboolean xdg_app_repo_generate_appstream (OstreeRepo *repo, + const char **gpg_key_ids, + const char *gpg_homedir, + GCancellable *cancellable, + GError **error); + #endif /* __XDG_APP_UTILS_H__ */