diff --git a/src/operations/uninstall.rs b/src/operations/uninstall.rs index d832a2a..cc10044 100644 --- a/src/operations/uninstall.rs +++ b/src/operations/uninstall.rs @@ -2,30 +2,24 @@ use std::env; use std::path::Path; use tokio::fs; -use crate::internal::commands::ShellCommand; -use crate::internal::error::SilentUnwrap; +use crate::builder::pacman::PacmanUninstallBuilder; use crate::internal::exit_code::AppExitCode; -use crate::Options; +use crate::{crash, Options}; /// Uninstalls the given packages #[tracing::instrument(level = "trace")] pub async fn uninstall(packages: Vec, options: Options) { - let mut pacman_args = vec!["-Rs"]; - pacman_args.append(&mut packages.iter().map(|s| s.as_str()).collect()); - - if options.noconfirm { - pacman_args.push("--noconfirm"); - } tracing::debug!("Uninstalling: {:?}", &packages); - ShellCommand::pacman() - .elevated() - .args(pacman_args) - .wait_success() + PacmanUninstallBuilder::default() + .recursive(true) + .no_confirm(options.noconfirm) + .packages(&packages) + .uninstall() .await - .silent_unwrap(AppExitCode::PacmanError); - - tracing::debug!("Uninstalling packages: {:?} exited with code 0", &packages); + .unwrap_or_else(|_| { + crash!(AppExitCode::PacmanError, "Failed to remove packages"); + }); for package in packages { if Path::new(&format!(