Don't error out if there are no packages to clean

i18n
Michal 2 years ago
parent 89d3c4e1db
commit 951d31bd77

@ -1,3 +1,5 @@
use std::process::Command;
use crate::crash; use crate::crash;
use crate::info; use crate::info;
use crate::internal::commands::ShellCommand; use crate::internal::commands::ShellCommand;
@ -16,56 +18,82 @@ pub fn clean(options: Options) {
.wait_with_output() .wait_with_output()
.silent_unwrap(AppExitCode::PacmanError); .silent_unwrap(AppExitCode::PacmanError);
info(format!( if orphaned_packages.stdout.as_str() == "" {
"Removing orphans would uninstall the following packages: \n{}", info("No orphaned packages found".to_string());
&orphaned_packages.stdout } else {
)); info(format!(
let cont = prompt("Continue?".to_string(), false); "Removing orphans would uninstall the following packages: \n{}",
if !cont { &orphaned_packages.stdout
info("Exiting".to_string()); ));
std::process::exit(AppExitCode::PacmanError as i32); let cont = prompt("Continue?".to_string(), false);
} if !cont {
info("Exiting".to_string());
std::process::exit(AppExitCode::PacmanError as i32);
}
let mut pacman_args = vec!["-Rns"]; let mut pacman_args = vec!["-Rns"];
if noconfirm { if noconfirm {
pacman_args.push("--noconfirm"); pacman_args.push("--noconfirm");
} }
let orphaned_packages_vec = orphaned_packages.stdout.split('\n').collect::<Vec<&str>>(); let orphaned_packages_vec = orphaned_packages.stdout.split('\n').collect::<Vec<&str>>();
for package in &orphaned_packages_vec { for package in &orphaned_packages_vec {
if package.len() > 0 { if !package.is_empty() {
pacman_args.push(package); pacman_args.push(package);
}
} }
}
if verbosity >= 1 { if verbosity >= 1 {
log(format!("Removing orphans: {:?}", orphaned_packages_vec)); log(format!("Removing orphans: {:?}", orphaned_packages_vec));
} }
let pacman_result = ShellCommand::pacman() let pacman_result = ShellCommand::pacman()
.elevated() .elevated()
.args(pacman_args) .args(pacman_args)
.wait() .wait()
.silent_unwrap(AppExitCode::PacmanError); .silent_unwrap(AppExitCode::PacmanError);
if pacman_result.success() { if pacman_result.success() {
info("Successfully removed orphans".to_string()); info("Successfully removed orphans".to_string());
} else { } else {
crash( crash(
"Failed to remove orphans".to_string(), "Failed to remove orphans".to_string(),
AppExitCode::PacmanError, AppExitCode::PacmanError,
); );
}
} }
let clear_cache = prompt("Also clear pacman's package cache?".to_string(), false); let clear_cache = prompt("Also clear pacman's package cache?".to_string(), false);
if clear_cache { if clear_cache {
let mut pacman_args = vec!["-Scc"]; let mut pacman_args = vec!["-Sc"];
if noconfirm { if noconfirm {
pacman_args.push("--noconfirm"); pacman_args.push("--noconfirm");
} }
let mut paccache_args = vec!["-r"];
if noconfirm {
paccache_args.push("--noconfirm");
}
if verbosity >= 1 {
log("Clearing using `paccache -r`".to_string());
}
Command::new("sudo")
.arg("paccache")
.args(paccache_args)
.spawn()
.unwrap_or_else(|e| {
crash(
format!("Couldn't clear cache using `paccache -r`, {}", e),
AppExitCode::PacmanError,
)
})
.wait()
.unwrap();
if verbosity >= 1 { if verbosity >= 1 {
log("Clearing package cache".to_string()); log("Clearing using `pacman -Sc`".to_string());
} }
let pacman_result = ShellCommand::pacman() let pacman_result = ShellCommand::pacman()

Loading…
Cancel
Save