gboolean ostree_builtin_config (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; glnx_unref_object OstreeRepo *repo = NULL; gboolean ret = FALSE; const char *op; const char *section_key; const char *value; g_autofree char *section = NULL; g_autofree char *key = NULL; GKeyFile *config = NULL; context = g_option_context_new ("- Change configuration settings"); if (!ostree_option_context_parse (context, options, &argc, &argv, OSTREE_BUILTIN_FLAG_NONE, &repo, cancellable, error)) goto out; if (argc < 2) { ot_util_usage_error (context, "OPERATION must be specified", error); goto out; } op = argv[1]; if (!strcmp (op, "set")) { if (argc < 4) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "KEY and VALUE must be specified"); goto out; } section_key = argv[2]; value = argv[3]; if (!split_key_string (section_key, §ion, &key, error)) goto out; config = ostree_repo_copy_config (repo); g_key_file_set_string (config, section, key, value); if (!ostree_repo_write_config (repo, config, error)) goto out; } else if (!strcmp (op, "get")) { GKeyFile *readonly_config = NULL; g_autofree char *value = NULL; if (argc < 3) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "KEY must be specified"); goto out; } section_key = argv[2]; if (!split_key_string (section_key, §ion, &key, error)) goto out; readonly_config = ostree_repo_get_config (repo); value = g_key_file_get_string (readonly_config, section, key, error); if (value == NULL) goto out; g_print ("%s\n", value); } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Unknown operation %s", op); goto out; } ret = TRUE; out: if (config) g_key_file_free (config); return ret; }
gboolean ostree_builtin_config (int argc, char **argv, OstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; g_autoptr(OstreeRepo) repo = NULL; gboolean ret = FALSE; const char *op; const char *section_key; const char *value; g_autofree char *section = NULL; g_autofree char *key = NULL; GKeyFile *config = NULL; context = g_option_context_new ("(get KEY|set KEY VALUE)"); if (!ostree_option_context_parse (context, options, &argc, &argv, invocation, &repo, cancellable, error)) goto out; if (argc < 2) { ot_util_usage_error (context, "OPERATION must be specified", error); goto out; } op = argv[1]; if (!strcmp (op, "set")) { if (opt_group) { if (argc < 4) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "GROUP name, KEY and VALUE must be specified"); goto out; } section = g_strdup(opt_group); key = g_strdup(argv[2]); value = argv[3]; } else { if (argc < 4) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "KEY and VALUE must be specified"); goto out; } section_key = argv[2]; value = argv[3]; if(!split_key_string (section_key, §ion, &key, error)) goto out; } config = ostree_repo_copy_config (repo); g_key_file_set_string (config, section, key, value); if (!ostree_repo_write_config (repo, config, error)) goto out; } else if (!strcmp (op, "get")) { GKeyFile *readonly_config = NULL; g_autofree char *value = NULL; if (opt_group) { if (argc < 3) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Group name and key must be specified"); goto out; } section = g_strdup(opt_group); key = g_strdup(argv[2]); } else { if(argc < 3) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "KEY must be specified"); goto out; } section_key = argv[2]; if (!split_key_string (section_key, §ion, &key, error)) goto out; } readonly_config = ostree_repo_get_config (repo); value = g_key_file_get_string (readonly_config, section, key, error); if (value == NULL) goto out; g_print ("%s\n", value); } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Unknown operation %s", op); goto out; } ret = TRUE; out: if (config) g_key_file_free (config); return ret; }