From 290b8f1569a97a2d6d00844d5b13981bca8f3400 Mon Sep 17 00:00:00 2001 From: Amy Date: Thu, 4 Nov 2021 14:09:46 +0100 Subject: [PATCH] now also can remove and purge packages specified from a file --- src/main.rs | 8 +++++- src/mods/inssort.rs | 1 - src/mods/purge.rs | 61 +++++++++++++++++++++++++++++++++++++++++++ src/mods/uninstall.rs | 60 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 80a3f4e..8261046 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ mod mods; -use mods::{clearcache::{clearcache}, clone::clone, help::help, inssort::{inssort, inssort_from_file}, install::install, purge::{purge}, search::{a_search, r_search}, strs::err_rec, strs::err_unrec, strs::inf, uninstall::{uninstall}, update::{update}, upgrade::{upgrade}, ver::ver, xargs::*}; +use mods::{clearcache::{clearcache}, clone::clone, help::help, inssort::{inssort, inssort_from_file}, install::install, purge::{purge, purge_from_file}, search::{a_search, r_search}, strs::err_rec, strs::err_unrec, strs::inf, uninstall::{uninstall, uninstall_from_file}, update::{update}, upgrade::{upgrade}, ver::ver, xargs::*}; use std::{env, process::exit, process::Command}; use nix::unistd::Uid; @@ -35,6 +35,12 @@ fn main() { "-Rs" | "-Rsn" | "purge" => { purge(noconfirm, pkgs) } + "-Rl" | "-Rln" | "rml" => { + uninstall_from_file(noconfirm, &pkgs[0]); + } + "-Rsl" | "-Rsln" | "purgel" => { + purge_from_file(noconfirm, &pkgs[0]); + } "-Syu" | "-Syun" |"upg" => { upgrade(noconfirm); } diff --git a/src/mods/inssort.rs b/src/mods/inssort.rs index c46d483..2315b56 100644 --- a/src/mods/inssort.rs +++ b/src/mods/inssort.rs @@ -96,7 +96,6 @@ pub fn inssort_from_file(noconfirm: bool, as_dep: bool, file: &str) { let mut contents = String::new(); contents = std::fs::read_to_string(&file).expect("Couldn't read file"); for line in contents.lines() { - println!("{}", line); pkgs.push(line.to_string()); } let mut repo = vec![]; diff --git a/src/mods/purge.rs b/src/mods/purge.rs index 9f18aac..ac3b956 100644 --- a/src/mods/purge.rs +++ b/src/mods/purge.rs @@ -58,3 +58,64 @@ pub fn purge(noconfirm: bool, pkgs: Vec) { } } } + + +pub fn purge_from_file(noconfirm: bool, file: &str) { + let mut pkgs: Vec = Vec::new(); + let mut contents = String::new(); + contents = std::fs::read_to_string(&file).expect("Couldn't read file"); + for line in contents.lines() { + pkgs.push(line.to_string()); + } + sec(format!( + "Attempting to uninstall packages: {}", + &pkgs.join(" ") + )); + if noconfirm == true { + let result = Command::new("pacman") + .arg("-Rsu") + .args(&pkgs) + .arg("--noconfirm") + .status() + .expect("Couldn't call pacman"); + match result.code() { + Some(0) => { + succ(format!( + "Succesfully uninstalled packages: {}", + &pkgs.join(" ") + )); + rem_pkg(&pkgs); + } + Some(_) => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + None => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + }; + } else { + let result = Command::new("pacman") + .arg("-Rsu") + .args(&pkgs) + .status() + .expect("Couldn't call pacman"); + match result.code() { + Some(0) => { + succ(format!( + "Succesfully uninstalled packages: {}", + &pkgs.join(" ") + )); + rem_pkg(&pkgs); + } + Some(_) => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + None => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + }; + } + for pkg in &pkgs { + let pkgdir = format!("{}/.cache/ame/{}", std::env::var("HOME").unwrap(), pkg); + let path = Path::new(&pkgdir); + if path.is_dir() { + let rm_result = fs::remove_dir_all(&path); + match rm_result { + Ok(_) => succ(format!("Removed AUR cache directory for {}", pkg)), + Err(_) => err_unrec(format!("Failed to remove AUR cache directory for {}", pkg)), + }; + } + } +} \ No newline at end of file diff --git a/src/mods/uninstall.rs b/src/mods/uninstall.rs index 415a37a..45a79c7 100644 --- a/src/mods/uninstall.rs +++ b/src/mods/uninstall.rs @@ -58,3 +58,63 @@ pub fn uninstall(noconfirm: bool, pkgs: Vec) { } } } + +pub fn uninstall_from_file(noconfirm: bool, file: &str) { + let mut pkgs: Vec = Vec::new(); + let mut contents = String::new(); + contents = std::fs::read_to_string(&file).expect("Couldn't read file"); + for line in contents.lines() { + pkgs.push(line.to_string()); + } + sec(format!( + "Attempting to uninstall packages: {}", + &pkgs.join(" ") + )); + if noconfirm == true { + let result = Command::new("pacman") + .arg("-Ru") + .args(&pkgs) + .arg("--noconfirm") + .status() + .expect("Couldn't call pacman"); + match result.code() { + Some(0) => { + succ(format!( + "Succesfully uninstalled packages: {}", + &pkgs.join(" ") + )); + rem_pkg(&pkgs); + } + Some(_) => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + None => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + }; + } else { + let result = Command::new("pacman") + .arg("-Ru") + .args(&pkgs) + .status() + .expect("Couldn't call pacman"); + match result.code() { + Some(0) => { + succ(format!( + "Succesfully uninstalled packages: {}", + &pkgs.join(" ") + )); + rem_pkg(&pkgs); + } + Some(_) => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + None => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), + }; + } + for pkg in &pkgs { + let pkgdir = format!("{}/.cache/ame/{}", std::env::var("HOME").unwrap(), pkg); + let path = Path::new(&pkgdir); + if path.is_dir() { + let rm_result = fs::remove_dir_all(&path); + match rm_result { + Ok(_) => succ(format!("Removed AUR cache directory for {}", pkg)), + Err(_) => err_unrec(format!("Failed to remove AUR cache directory for {}", pkg)), + }; + } + } +} \ No newline at end of file