summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-05-11 16:27:43 +0200
committerAlexander Larsson <alexl@redhat.com>2016-05-11 16:27:43 +0200
commit984e850fd6def4ec4d8d0a386051cacda3157627 (patch)
tree8bc3e208a0a98c665941de97aa944209cf5c2550
parent9e4bb25b2c389263bc146f5393f62ad0e1348df2 (diff)
downloadxdg-app-984e850fd6def4ec4d8d0a386051cacda3157627.tar.gz
remote-add: Use flatpak_dir_modify_remove
-rw-r--r--app/flatpak-builtins-add-remote.c193
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)
{