int rpmostree_builtin_pkg_remove (int argc, char **argv, GCancellable *cancellable, GError **error) { GOptionContext *context; glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL; g_autoptr(GPtrArray) packages_to_remove = g_ptr_array_new (); context = g_option_context_new ("PACKAGE [PACKAGE...] - Remove one or more overlay packages"); if (!rpmostree_option_context_parse (context, option_entries, &argc, &argv, RPM_OSTREE_BUILTIN_FLAG_NONE, cancellable, &sysroot_proxy, error)) return EXIT_FAILURE; if (argc < 2) { rpmostree_usage_error (context, "At least one PACKAGE must be specified", error); return EXIT_FAILURE; } for (int i = 1; i < argc; i++) g_ptr_array_add (packages_to_remove, argv[i]); g_ptr_array_add (packages_to_remove, NULL); return pkg_change (sysroot_proxy, NULL, (const char *const*)packages_to_remove->pdata, cancellable, error); }
gboolean rpmostree_builtin_uninstall (int argc, char **argv, RpmOstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error) { GOptionContext *context; glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL; _cleanup_peer_ GPid peer_pid = 0; context = g_option_context_new ("PACKAGE [PACKAGE...]"); g_option_context_add_main_entries (context, uninstall_option_entry, NULL); if (!rpmostree_option_context_parse (context, option_entries, &argc, &argv, invocation, cancellable, NULL, NULL, &sysroot_proxy, &peer_pid, NULL, error)) return FALSE; if (argc < 2 && !opt_uninstall_all) { rpmostree_usage_error (context, "At least one PACKAGE must be specified", error); return FALSE; } if (opt_install && opt_uninstall_all) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, "Cannot specify both --install and --all"); return FALSE; } /* shift to first pkgspec and ensure it's a proper strv (previous parsing * might have moved args around) */ argv++; argc--; argv[argc] = NULL; /* If we don't also have to install pkgs, perform uninstalls offline; users don't expect * the "auto-update" behaviour here. */ if (!opt_install) opt_cache_only = TRUE; return pkg_change (invocation, sysroot_proxy, (const char *const*)opt_install, (const char *const*)argv, cancellable, error); }
gboolean rpmostree_builtin_install (int argc, char **argv, RpmOstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error) { GOptionContext *context; glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL; _cleanup_peer_ GPid peer_pid = 0; context = g_option_context_new ("PACKAGE [PACKAGE...]"); g_option_context_add_main_entries (context, install_option_entry, NULL); if (!rpmostree_option_context_parse (context, option_entries, &argc, &argv, invocation, cancellable, NULL, NULL, &sysroot_proxy, &peer_pid, NULL, error)) return FALSE; if (argc < 2) { rpmostree_usage_error (context, "At least one PACKAGE must be specified", error); return FALSE; } /* shift to first pkgspec and ensure it's a proper strv (previous parsing * might have moved args around) */ argv++; argc--; argv[argc] = NULL; return pkg_change (invocation, sysroot_proxy, (const char *const*)argv, (const char *const*)opt_uninstall, cancellable, error); }