From 34e50db84b2d17acc9b5bf9de190a9480f25ea4e Mon Sep 17 00:00:00 2001 From: Fries Date: Mon, 12 Sep 2022 23:57:27 -0700 Subject: [PATCH] operations/upgrade: use brand new upgrade builder --- src/builder/pacman.rs | 24 ++++++++++++++++++++++++ src/operations/upgrade.rs | 38 ++++++++++++++------------------------ 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/builder/pacman.rs b/src/builder/pacman.rs index ef25968..7374c72 100644 --- a/src/builder/pacman.rs +++ b/src/builder/pacman.rs @@ -253,6 +253,30 @@ impl PacmanSearchBuilder { } } +#[derive(Default, Debug, Clone)] +pub struct PacmanUpgradeBuilder { + no_confirm: bool, +} + +impl PacmanUpgradeBuilder { + pub fn no_confirm(mut self, no_confirm: bool) -> Self { + self.no_confirm = no_confirm; + + self + } + + #[tracing::instrument(level = "trace")] + pub async fn upgrade(self) -> AppResult<()> { + let mut command = ShellCommand::pacman().elevated().arg("-Syu"); + + if self.no_confirm { + command = command.arg("--noconfirm") + } + + command.wait_success().await + } +} + #[derive(Default, Debug, Clone)] pub struct PacmanUninstallBuilder { packages: Vec, diff --git a/src/operations/upgrade.rs b/src/operations/upgrade.rs index 873a4c8..9a6110a 100644 --- a/src/operations/upgrade.rs +++ b/src/operations/upgrade.rs @@ -1,6 +1,5 @@ use crate::args::UpgradeArgs; -use crate::builder::pacman::{PacmanColor, PacmanQueryBuilder}; -use crate::internal::commands::ShellCommand; +use crate::builder::pacman::{PacmanColor, PacmanQueryBuilder, PacmanUpgradeBuilder}; use crate::internal::detect; use crate::internal::error::SilentUnwrap; use crate::internal::exit_code::AppExitCode; @@ -27,31 +26,22 @@ pub async fn upgrade(args: UpgradeArgs, options: Options) { async fn upgrade_repo(options: Options) { let noconfirm = options.noconfirm; - let mut pacman_args = vec!["-Syu"]; - if noconfirm { - pacman_args.push("--noconfirm"); - } - tracing::debug!("Upgrading repo packages"); - let pacman_result = ShellCommand::pacman() - .elevated() - .args(pacman_args) - .wait() + PacmanUpgradeBuilder::default() + .no_confirm(noconfirm) + .upgrade() .await - .silent_unwrap(AppExitCode::PacmanError); - - if pacman_result.success() { - tracing::info!("Successfully upgraded repo packages"); - } else { - let continue_upgrading = prompt!(default no, - "Failed to upgrade repo packages, continue to upgrading AUR packages?", - ); - if !continue_upgrading { - tracing::info!("Exiting"); - std::process::exit(AppExitCode::PacmanError as i32); - } - } + .unwrap_or_else(|_| { + let continue_upgrading = prompt!(default no, + "Failed to upgrade repo packages, continue to upgrading AUR packages?", + ); + if !continue_upgrading { + tracing::info!("Exiting"); + std::process::exit(AppExitCode::PacmanError as i32); + } + }); + tracing::info!("Successfully upgraded repo packages"); } #[tracing::instrument(level = "trace")]