From 37b900c56a771da77c778f6fac21bd3c9e88bde4 Mon Sep 17 00:00:00 2001 From: Jason Stelzer Date: Sat, 26 Nov 2022 14:38:18 -0500 Subject: [PATCH] Add garuda-update (#227) --- src/config.rs | 1 + src/steps/os/archlinux.rs | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index 412a0dc8..3c65db33 100644 --- a/src/config.rs +++ b/src/config.rs @@ -225,6 +225,7 @@ pub struct Brew { #[derive(Debug, Deserialize, Clone, Copy)] #[serde(rename_all = "snake_case")] pub enum ArchPackageManager { + GarudaUpdate, Autodetect, Trizen, Paru, diff --git a/src/steps/os/archlinux.rs b/src/steps/os/archlinux.rs index e75fb855..6b22d95e 100644 --- a/src/steps/os/archlinux.rs +++ b/src/steps/os/archlinux.rs @@ -71,6 +71,27 @@ impl YayParu { } } +pub struct GarudaUpdate { + executable: PathBuf, +} + +impl ArchPackageManager for GarudaUpdate { + fn upgrade(&self, ctx: &ExecutionContext) -> Result<()> { + let mut command = ctx.run_type().execute(&self.executable); + command.env("PATH", get_execution_path()); + command.status_checked()?; + Ok(()) + } +} + +impl GarudaUpdate { + fn get() -> Option { + Some(Self { + executable: which("garuda-update")?, + }) + } +} + pub struct Trizen { executable: PathBuf, } @@ -283,14 +304,16 @@ pub fn get_arch_package_manager(ctx: &ExecutionContext) -> Option YayParu::get("paru", &pacman) + config::ArchPackageManager::Autodetect => GarudaUpdate::get() .map(box_package_manager) + .or_else(|| YayParu::get("paru", &pacman).map(box_package_manager)) .or_else(|| YayParu::get("yay", &pacman).map(box_package_manager)) .or_else(|| Trizen::get().map(box_package_manager)) .or_else(|| Pikaur::get().map(box_package_manager)) .or_else(|| Pamac::get().map(box_package_manager)) .or_else(|| Pacman::get(ctx).map(box_package_manager)) .or_else(|| Aura::get(ctx).map(box_package_manager)), + config::ArchPackageManager::GarudaUpdate => GarudaUpdate::get().map(box_package_manager), config::ArchPackageManager::Trizen => Trizen::get().map(box_package_manager), config::ArchPackageManager::Paru => YayParu::get("paru", &pacman).map(box_package_manager), config::ArchPackageManager::Yay => YayParu::get("yay", &pacman).map(box_package_manager),