/* * Copyright © 2014 Red Hat, Inc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * * Authors: * Alexander Larsson */ #include "config.h" #include #include #include #include #include #include #include "libgsystem.h" #include "libglnx/libglnx.h" #include "flatpak-builtins.h" #include "flatpak-utils.h" #include "flatpak-run.h" static GOptionEntry options[] = { { NULL } }; gboolean flatpak_builtin_override (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; const char *app; g_autoptr(FlatpakContext) arg_context = NULL; g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GKeyFile) metakey = NULL; g_autoptr(FlatpakContext) overrides = NULL; g_autoptr(GError) my_error = NULL; context = g_option_context_new ("APP - Override settings for application"); arg_context = flatpak_context_new (); g_option_context_add_group (context, flatpak_context_get_options (arg_context)); if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) return FALSE; if (argc < 2) { usage_error (context, "APP must be specified", error); return FALSE; } app = argv[1]; if (!flatpak_is_valid_name (app)) return flatpak_fail (error, "'%s' is not a valid application name", app); metakey = flatpak_load_override_keyfile (app, flatpak_dir_is_user (dir), &my_error); if (metakey == NULL) { if (!g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) { g_propagate_error (error, g_steal_pointer (&my_error)); return FALSE; } metakey = g_key_file_new (); } overrides = flatpak_context_new (); if (!flatpak_context_load_metadata (overrides, metakey, error)) return FALSE; flatpak_context_merge (overrides, arg_context); flatpak_context_save_metadata (overrides, metakey); if (!flatpak_save_override_keyfile (metakey, app, flatpak_dir_is_user (dir), error)) return FALSE; return TRUE; }