diff options
author | Alexander Larsson <alexl@redhat.com> | 2016-05-11 16:27:43 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2016-05-11 16:27:43 +0200 |
commit | 984e850fd6def4ec4d8d0a386051cacda3157627 (patch) | |
tree | 8bc3e208a0a98c665941de97aa944209cf5c2550 | |
parent | 9e4bb25b2c389263bc146f5393f62ad0e1348df2 (diff) | |
download | xdg-app-984e850fd6def4ec4d8d0a386051cacda3157627.tar.gz |
remote-add: Use flatpak_dir_modify_remove
-rw-r--r-- | app/flatpak-builtins-add-remote.c | 193 |
1 files changed, 65 insertions, 128 deletions
diff --git a/app/flatpak-builtins-add-remote.c b/app/flatpak-builtins-add-remote.c index 5186f63..d4d5e74 100644 --- a/app/flatpak-builtins-add-remote.c +++ b/app/flatpak-builtins-add-remote.c @@ -141,30 +141,48 @@ load_keys (GCancellable *cancellable, return g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (output_stream)); } -gboolean -import_keys (FlatpakDir *dir, - const char *remote_name, - GCancellable *cancellable, - GError **error) +static GKeyFile * +get_config_from_opts (FlatpakDir *dir, const char *remote_name) { - if (opt_gpg_import != NULL) + GKeyFile *config = ostree_repo_copy_config (flatpak_dir_get_repo (dir)); + g_autofree char *group = g_strdup_printf ("remote \"%s\"", remote_name); + + if (opt_no_gpg_verify) { - g_autoptr(GInputStream) input_stream = NULL; - guint imported = 0; + g_key_file_set_boolean (config, group, "gpg-verify", FALSE); + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + } - if (!open_source_stream (&input_stream, cancellable, error)) - return FALSE; + if (opt_do_gpg_verify) + { + g_key_file_set_boolean (config, group, "gpg-verify", TRUE); + g_key_file_set_boolean (config, group, "gpg-verify-summary", TRUE); + } - if (!ostree_repo_remote_gpg_import (flatpak_dir_get_repo (dir), remote_name, input_stream, - NULL, &imported, cancellable, error)) - return FALSE; + if (opt_url) + g_key_file_set_string (config, group, "url", opt_url); + + if (opt_title) + g_key_file_set_string (config, group, "xa.title", opt_title); + + if (opt_no_enumerate) + g_key_file_set_boolean (config, group, "xa.noenumerate", TRUE); - /* XXX If we ever add internationalization, use ngettext() here. */ - g_print ("Imported %u GPG key%s to remote \"%s\"\n", - imported, (imported == 1) ? "" : "s", remote_name); + if (opt_do_enumerate) + g_key_file_set_boolean (config, group, "xa.noenumerate", FALSE); + + if (opt_disable) + g_key_file_set_boolean (config, group, "xa.disable", TRUE); + else if (opt_enable) + g_key_file_set_boolean (config, group, "xa.disable", FALSE); + + if (opt_prio != -1) + { + g_autofree char *prio_as_string = g_strdup_printf ("%d", opt_prio); + g_key_file_set_string (config, group, "xa.prio", prio_as_string); } - return TRUE; + return config; } gboolean @@ -175,11 +193,14 @@ flatpak_builtin_add_remote (int argc, char **argv, g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GVariantBuilder) optbuilder = NULL; g_autoptr(GFile) file = NULL; + g_auto(GStrv) remotes = NULL; g_autofree char *title = NULL; g_autofree char *remote_url = NULL; const char *remote_name; const char *url_or_path; g_autofree char *prio_as_string = NULL; + g_autoptr(GKeyFile) config = NULL; + g_autoptr(GBytes) gpg_data = NULL; context = g_option_context_new ("NAME LOCATION - Add a remote repository"); @@ -194,96 +215,50 @@ flatpak_builtin_add_remote (int argc, char **argv, remote_name = argv[1]; url_or_path = argv[2]; + remotes = flatpak_dir_list_remotes (dir, cancellable, error); + if (remotes == NULL) + return FALSE; + + if (g_strv_contains ((const char **)remotes, remote_name)) + { + if (opt_if_not_exists) + return TRUE; /* Do nothing */ + + return flatpak_fail (error, "Remote %s already exists", remote_name); + } + file = g_file_new_for_commandline_arg (url_or_path); if (g_file_is_native (file)) remote_url = g_file_get_uri (file); else remote_url = g_strdup (url_or_path); - optbuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - - if (opt_no_gpg_verify) - { - g_variant_builder_add (optbuilder, "{s@v}", - "gpg-verify", - g_variant_new_variant (g_variant_new_boolean (FALSE))); - g_variant_builder_add (optbuilder, "{s@v}", - "gpg-verify-summary", - g_variant_new_variant (g_variant_new_boolean (FALSE))); - } - else - { - g_variant_builder_add (optbuilder, "{s@v}", - "gpg-verify", - g_variant_new_variant (g_variant_new_boolean (TRUE))); - g_variant_builder_add (optbuilder, "{s@v}", - "gpg-verify-summary", - g_variant_new_variant (g_variant_new_boolean (TRUE))); - } - - if (opt_no_enumerate) - g_variant_builder_add (optbuilder, "{s@v}", - "xa.noenumerate", - g_variant_new_variant (g_variant_new_boolean (TRUE))); - - if (opt_disable) - g_variant_builder_add (optbuilder, "{s@v}", - "xa.disable", - g_variant_new_variant (g_variant_new_boolean (TRUE))); - - if (opt_prio != -1) - { - prio_as_string = g_strdup_printf ("%d", opt_prio); - g_variant_builder_add (optbuilder, "{s@v}", - "xa.prio", - g_variant_new_variant (g_variant_new_string (prio_as_string))); - } - - if (opt_title) - { - g_free (title); - title = g_strdup (opt_title); - } + /* Default to gpg verify */ + if (!opt_no_gpg_verify) + opt_do_gpg_verify = TRUE; - if (title) - g_variant_builder_add (optbuilder, "{s@v}", - "xa.title", - g_variant_new_variant (g_variant_new_string (title))); - - if (!ostree_repo_remote_change (flatpak_dir_get_repo (dir), NULL, - opt_if_not_exists ? OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS : - OSTREE_REPO_REMOTE_CHANGE_ADD, - remote_name, remote_url, - g_variant_builder_end (optbuilder), - cancellable, error)) - return FALSE; + opt_url = remote_url; - if (title == NULL) + if (opt_title == NULL) { title = flatpak_dir_fetch_remote_title (dir, remote_name, NULL, NULL); if (title) - { - g_autoptr(GKeyFile) config = NULL; - g_autofree char *group = g_strdup_printf ("remote \"%s\"", remote_name); - - config = ostree_repo_copy_config (flatpak_dir_get_repo (dir)); - g_key_file_set_string (config, group, "xa.title", title); - - if (!ostree_repo_write_config (flatpak_dir_get_repo (dir), config, error)) - return FALSE; - } + opt_title = title; } - if (!import_keys (dir, remote_name, cancellable, error)) - return FALSE; + config = get_config_from_opts (dir, remote_name); - if (!flatpak_dir_mark_changed (dir, error)) - return FALSE; + if (opt_gpg_import != NULL) + { + gpg_data = load_keys (cancellable, error); + if (gpg_data == NULL) + return FALSE; + } - return TRUE; + return flatpak_dir_modify_remove (dir, remote_name, config, gpg_data, cancellable, error); } gboolean @@ -295,7 +270,6 @@ flatpak_builtin_modify_remote (int argc, char **argv, GCancellable *cancellable, g_autoptr(GKeyFile) config = NULL; g_autoptr(GBytes) gpg_data = NULL; const char *remote_name; - g_autofree char *group = NULL; context = g_option_context_new ("NAME - Modify a remote repository"); @@ -311,47 +285,10 @@ flatpak_builtin_modify_remote (int argc, char **argv, GCancellable *cancellable, optbuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - group = g_strdup_printf ("remote \"%s\"", remote_name); - if (!ostree_repo_remote_get_url (flatpak_dir_get_repo (dir), remote_name, NULL, NULL)) return flatpak_fail (error, "No remote %s", remote_name); - config = ostree_repo_copy_config (flatpak_dir_get_repo (dir)); - - if (opt_no_gpg_verify) - { - g_key_file_set_boolean (config, group, "gpg-verify", FALSE); - g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); - } - - if (opt_do_gpg_verify) - { - g_key_file_set_boolean (config, group, "gpg-verify", TRUE); - g_key_file_set_boolean (config, group, "gpg-verify-summary", TRUE); - } - - if (opt_url) - g_key_file_set_string (config, group, "url", opt_url); - - if (opt_title) - g_key_file_set_string (config, group, "xa.title", opt_title); - - if (opt_no_enumerate) - g_key_file_set_boolean (config, group, "xa.noenumerate", TRUE); - - if (opt_do_enumerate) - g_key_file_set_boolean (config, group, "xa.noenumerate", FALSE); - - if (opt_disable) - g_key_file_set_boolean (config, group, "xa.disable", TRUE); - else if (opt_enable) - g_key_file_set_boolean (config, group, "xa.disable", FALSE); - - if (opt_prio != -1) - { - g_autofree char *prio_as_string = g_strdup_printf ("%d", opt_prio); - g_key_file_set_string (config, group, "xa.prio", prio_as_string); - } + config = get_config_from_opts (dir, remote_name); if (opt_gpg_import != NULL) { |