diff --git a/src/internal/detect.rs b/src/internal/detect.rs index 1e6c812..0dd1d35 100644 --- a/src/internal/detect.rs +++ b/src/internal/detect.rs @@ -1,19 +1,23 @@ use crate::internal::commands::ShellCommand; use crate::internal::error::SilentUnwrap; use crate::internal::exit_code::AppExitCode; -use crate::{prompt, warn}; +use crate::{prompt, warn, info}; pub fn detect() { + info!("Scanning for pacnew files"); + let mut pacnew = vec![]; - // Detect pacnew files - for entry in std::fs::read_dir("/etc").unwrap() { - let entry = entry.unwrap(); - let path = entry.path(); - if path.to_str().unwrap().contains(".pacnew") || path.to_str().unwrap().contains(".pacsave") - { - // If found, push to vector - pacnew.push(path); + // Run `find` to find pacnew files and split by lines into a vec + let find = std::process::Command::new("sudo") + .arg("pacdiff") + .arg("-f") + .output() + .unwrap(); + let find_lines = std::str::from_utf8(&find.stdout).unwrap().split("\n"); + for line in find_lines { + if line.len() > 0 { + pacnew.push(line.to_string()); } } diff --git a/src/operations/upgrade.rs b/src/operations/upgrade.rs index a30cd8e..472c3e1 100644 --- a/src/operations/upgrade.rs +++ b/src/operations/upgrade.rs @@ -58,16 +58,22 @@ pub fn upgrade(options: Options) { .args(&["--color", "never"]) .wait_with_output() .silent_unwrap(AppExitCode::PacmanError); + + // Collect by lines to a Vec let mut non_native = non_native.stdout.split('\n').collect::>(); + + // Remove last element, which is an empty line non_native.pop(); // Parse non-native packages into a Vec let mut parsed_non_native: Vec = vec![]; for pkg in non_native { + // Split by space let split = pkg.split(' ').collect::>(); if verbosity >= 1 { log!("{:?}", split); } + // Create QueriedPackage and push it to parsed_non_native let name = split[0].to_string(); let version = split[1].to_string(); parsed_non_native.push(QueriedPackage { name, version });