forked from Mirrors/flatpak-builder
builder: Add support for rename-appdata-file option
parent
f56d6a7290
commit
d43e797b4b
|
@ -46,6 +46,7 @@ struct BuilderManifest {
|
|||
char **cleanup_commands;
|
||||
char **finish_args;
|
||||
char *rename_desktop_file;
|
||||
char *rename_appdata_file;
|
||||
char *rename_icon;
|
||||
gboolean copy_icon;
|
||||
char *desktop_file_name_prefix;
|
||||
|
@ -80,6 +81,7 @@ enum {
|
|||
PROP_WRITABLE_SDK,
|
||||
PROP_FINISH_ARGS,
|
||||
PROP_RENAME_DESKTOP_FILE,
|
||||
PROP_RENAME_APPDATA_FILE,
|
||||
PROP_RENAME_ICON,
|
||||
PROP_COPY_ICON,
|
||||
PROP_DESKTOP_FILE_NAME_PREFIX,
|
||||
|
@ -104,6 +106,7 @@ builder_manifest_finalize (GObject *object)
|
|||
g_strfreev (self->cleanup_commands);
|
||||
g_strfreev (self->finish_args);
|
||||
g_free (self->rename_desktop_file);
|
||||
g_free (self->rename_appdata_file);
|
||||
g_free (self->rename_icon);
|
||||
g_free (self->desktop_file_name_prefix);
|
||||
g_free (self->desktop_file_name_suffix);
|
||||
|
@ -177,6 +180,10 @@ builder_manifest_get_property (GObject *object,
|
|||
g_value_set_string (value, self->rename_desktop_file);
|
||||
break;
|
||||
|
||||
case PROP_RENAME_APPDATA_FILE:
|
||||
g_value_set_string (value, self->rename_appdata_file);
|
||||
break;
|
||||
|
||||
case PROP_RENAME_ICON:
|
||||
g_value_set_string (value, self->rename_icon);
|
||||
break;
|
||||
|
@ -276,6 +283,11 @@ builder_manifest_set_property (GObject *object,
|
|||
self->rename_desktop_file = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_RENAME_APPDATA_FILE:
|
||||
g_free (self->rename_appdata_file);
|
||||
self->rename_appdata_file = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_RENAME_ICON:
|
||||
g_free (self->rename_icon);
|
||||
self->rename_icon = g_value_dup_string (value);
|
||||
|
@ -395,6 +407,13 @@ builder_manifest_class_init (BuilderManifestClass *klass)
|
|||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_RENAME_APPDATA_FILE,
|
||||
g_param_spec_string ("rename-appdata-file",
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_RENAME_ICON,
|
||||
g_param_spec_string ("rename-icon",
|
||||
|
@ -630,6 +649,7 @@ builder_manifest_checksum_for_cleanup (BuilderManifest *self,
|
|||
builder_cache_checksum_strv (cache, self->cleanup);
|
||||
builder_cache_checksum_strv (cache, self->cleanup_commands);
|
||||
builder_cache_checksum_str (cache, self->rename_desktop_file);
|
||||
builder_cache_checksum_str (cache, self->rename_appdata_file);
|
||||
builder_cache_checksum_str (cache, self->rename_icon);
|
||||
builder_cache_checksum_boolean (cache, self->copy_icon);
|
||||
builder_cache_checksum_str (cache, self->desktop_file_name_prefix);
|
||||
|
@ -904,6 +924,10 @@ builder_manifest_cleanup (BuilderManifest *self,
|
|||
g_autofree char **keys = NULL;
|
||||
g_auto(GStrv) env = NULL;
|
||||
guint n_keys;
|
||||
g_autoptr(GFile) appdata_dir = NULL;
|
||||
g_autofree char *appdata_basename = NULL;
|
||||
g_autoptr(GFile) appdata_file = NULL;
|
||||
|
||||
int i;
|
||||
|
||||
builder_manifest_checksum_for_cleanup (self, cache, context);
|
||||
|
@ -950,16 +974,63 @@ builder_manifest_cleanup (BuilderManifest *self,
|
|||
}
|
||||
}
|
||||
|
||||
appdata_dir = g_file_resolve_relative_path (app_root, "share/appdata");
|
||||
appdata_basename = g_strdup_printf ("%s.appdata.xml", self->app_id);
|
||||
appdata_file = g_file_get_child (appdata_dir, appdata_basename);
|
||||
|
||||
if (self->rename_appdata_file != NULL)
|
||||
{
|
||||
g_autoptr(GFile) src = g_file_get_child (appdata_dir, self->rename_appdata_file);
|
||||
|
||||
g_print ("Renaming %s to %s\n", self->rename_appdata_file, appdata_basename);
|
||||
if (!g_file_move (src, appdata_file, 0, NULL, NULL, NULL, error))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (self->rename_desktop_file != NULL)
|
||||
{
|
||||
g_autoptr(GFile) applications_dir = g_file_resolve_relative_path (app_root, "share/applications");
|
||||
g_autoptr(GFile) src = g_file_get_child (applications_dir, self->rename_desktop_file);
|
||||
g_autofree char *dest_basename = g_strdup_printf ("%s.desktop", self->app_id);
|
||||
g_autoptr(GFile) dest = g_file_get_child (applications_dir, dest_basename);
|
||||
g_autofree char *desktop_basename = g_strdup_printf ("%s.desktop", self->app_id);
|
||||
g_autoptr(GFile) dest = g_file_get_child (applications_dir, desktop_basename);
|
||||
|
||||
g_print ("Renaming %s to %s\n", self->rename_desktop_file, dest_basename);
|
||||
g_print ("Renaming %s to %s\n", self->rename_desktop_file, desktop_basename);
|
||||
if (!g_file_move (src, dest, 0, NULL, NULL, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
if (g_file_query_exists (appdata_file, NULL))
|
||||
{
|
||||
g_autofree char *contents;
|
||||
const char *to_replace;
|
||||
const char *match;
|
||||
g_autoptr(GString) new_contents = NULL;
|
||||
|
||||
if (!g_file_load_contents (appdata_file, NULL, &contents, NULL, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
new_contents = g_string_sized_new (strlen (contents));
|
||||
|
||||
to_replace = contents;
|
||||
|
||||
while ( (match = strstr (to_replace, self->rename_desktop_file)) != NULL)
|
||||
{
|
||||
g_string_append_len (new_contents, to_replace, match - to_replace);
|
||||
g_string_append (new_contents, desktop_basename);
|
||||
to_replace = match + strlen (self->rename_desktop_file);
|
||||
}
|
||||
|
||||
g_string_append (new_contents, to_replace);
|
||||
|
||||
if (!g_file_replace_contents (appdata_file,
|
||||
new_contents->str,
|
||||
new_contents->len,
|
||||
NULL,
|
||||
FALSE,
|
||||
G_FILE_CREATE_NONE,
|
||||
NULL,
|
||||
NULL, error))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (self->rename_icon)
|
||||
|
|
|
@ -153,6 +153,10 @@
|
|||
<term><option>rename-desktop-file</option></term>
|
||||
<listitem><para>Any desktop file with this name will be renamed to a name based on app-id during the cleanup phase.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>rename-appdata-file</option></term>
|
||||
<listitem><para>Any appdata file with this name will be renamed to a name based on app-id during the cleanup phase.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>rename-icon</option></term>
|
||||
<listitem><para>Any icon with this name will be renamed to a name based on app-id during the cleanup phase.</para></listitem>
|
||||
|
|
Loading…
Reference in New Issue