diff --git a/osupdater/src/main.rs b/osupdater/src/main.rs
index 50a035f..306fd6c 100644
--- a/osupdater/src/main.rs
+++ b/osupdater/src/main.rs
@@ -2,7 +2,7 @@ use std::process::{Command, Stdio};
use std::path::Path;
use color_print::cprintln;
//use std::io::{stdin,stdout,Write};
-use input_validation::{get_choice};
+//use input_validation::{get_choice};
fn trim_newline(s: &mut String) {
if s.ends_with('\n') {
@@ -13,280 +13,335 @@ fn trim_newline(s: &mut String) {
}
}
-fn main() {
- {
- //Clear termianl, and move cursor to 1,1 inside the terminal
- print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
+fn update_apt() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
- // Tell user that we are going to start the update procedure
- cprintln!("osupdater : This tool will locate and run any package/container managers on your system.\n");
- cprintln!("Looking for native package managers.\n");
+ let find_apt = Command::new("which")
+ .arg("apt").stdout(Stdio::piped()).output().unwrap();
+ let mut apt_bin = String::from_utf8(find_apt.stdout).unwrap();
+ trim_newline(&mut apt_bin);
- //Figure out if the program should ask if an update tool should be run
- //let autoupdate_choices = vec!["Y","N"];
- //let autoupdate_index = get_choice("Shall the application autorun each update tool?", &autoupdate_choices);
- //println!("Selection was {}", autoupdate_choices[autoupdate_index]);
-
- //Find if binaries exist and their location
- let find_sudo = Command::new("which")
- .arg("sudo").stdout(Stdio::piped()).output().unwrap();
- let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
- trim_newline(&mut sudo_bin);
-
- let find_apt = Command::new("which")
- .arg("apt").stdout(Stdio::piped()).output().unwrap();
- let mut apt_bin = String::from_utf8(find_apt.stdout).unwrap();
- trim_newline(&mut apt_bin);
-
- let find_dnf5 = Command::new("which")
- .arg("dnf5").stdout(Stdio::piped()).output().unwrap();
- let mut dnf5_bin = String::from_utf8(find_dnf5.stdout).unwrap();
- trim_newline(&mut dnf5_bin);
-
- let find_dnf = Command::new("which")
- .arg("dnf").stdout(Stdio::piped()).output().unwrap();
- let mut dnf_bin = String::from_utf8(find_dnf.stdout).unwrap();
- trim_newline(&mut dnf_bin);
-
- let find_pacman = Command::new("which")
- .arg("pacman").stdout(Stdio::piped()).output().unwrap();
- let mut pacman_bin = String::from_utf8(find_pacman.stdout).unwrap();
- trim_newline(&mut pacman_bin);
-
- let find_urpmi = Command::new("which")
- .arg("urpmi").stdout(Stdio::piped()).output().unwrap();
- let mut urpmi_bin = String::from_utf8(find_urpmi.stdout).unwrap();
- trim_newline(&mut urpmi_bin);
-
- let find_zypper = Command::new("which")
- .arg("zypper").stdout(Stdio::piped()).output().unwrap();
- let mut zypper_bin = String::from_utf8(find_zypper.stdout).unwrap();
- trim_newline(&mut zypper_bin);
-
- let find_flatpak = Command::new("which")
- .arg("flatpak").stdout(Stdio::piped()).output().unwrap();
- let mut flatpak_bin = String::from_utf8(find_flatpak.stdout).unwrap();
- trim_newline(&mut flatpak_bin);
-
- let find_snap = Command::new("which")
- .arg("snap").stdout(Stdio::piped()).output().unwrap();
- let mut snap_bin = String::from_utf8(find_snap.stdout).unwrap();
- trim_newline(&mut snap_bin);
-
- let find_pip_review = Command::new("which")
- .arg("pip-review").stdout(Stdio::piped()).output().unwrap();
- let mut pip_review_bin = String::from_utf8(find_pip_review.stdout).unwrap();
- trim_newline(&mut pip_review_bin);
-
- let find_distrobox_upgrade = Command::new("which")
- .arg("distrobox-upgrade").stdout(Stdio::piped()).output().unwrap();
- let mut distrobox_upgrade_bin = String::from_utf8(find_distrobox_upgrade.stdout).unwrap();
- trim_newline(&mut distrobox_upgrade_bin);
-
- let find_podman = Command::new("which")
- .arg("podman").stdout(Stdio::piped()).output().unwrap();
- let mut podman_bin = String::from_utf8(find_podman.stdout).unwrap();
- trim_newline(&mut podman_bin);
-
- //apt
- let path = Path::new(&apt_bin);
- if path.exists(){
- cprintln!("Updating via: apt");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&apt_bin).arg("update").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&apt_bin).arg("upgrade").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // dnf
- let path = Path::new(&dnf_bin);
- let path_dnf5 = Path::new(&dnf5_bin);
-
- if path_dnf5.exists() {
- cprintln!("dnf found but skipped since dnf5 is present")
- } else if path.exists(){
- cprintln!("Updating via: dnf");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&dnf_bin).arg("--refresh").arg("--skip-broken").arg("--nobest").arg("-y").arg("update")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // dnf5
- let path = Path::new(&dnf5_bin);
- if path.exists(){
- cprintln!("Updating via: dnf5");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&dnf5_bin).arg("--refresh").arg("--nobest").arg("-y").arg("update")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // pacman
- let path = Path::new(&pacman_bin);
- if path.exists(){
- cprintln!("Updating via: pacman");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&pacman_bin).arg("-Syu")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // urpmi
- let path = Path::new(&urpmi_bin);
- if path.exists(){
- cprintln!("Updating via urpmi");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&urpmi_bin).arg("--auto-update").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // zypper
- let path = Path::new(&zypper_bin);
- if path.exists(){
- cprintln!("Updating via: zypper");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&zypper_bin).arg("up").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // Check container formats
- cprintln!("Checking application containers");
-
- // flatpak
- let path = Path::new(&flatpak_bin);
- if path.exists(){
- cprintln!("Updating user flatpak installs");
- let mut cmd =
- Command::new(&flatpak_bin)
- .arg("update").arg("--user").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
- let path = Path::new(&flatpak_bin);
- if path.exists(){
- cprintln!("Updating system flatpak installs");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&flatpak_bin).arg("update").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- // snap
- let path = Path::new(&snap_bin);
- if path.exists(){
- cprintln!("Updating user snap installation");
- let mut cmd =
- Command::new(&snap_bin)
- .arg("refresh").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
- let path = Path::new(&snap_bin);
- if path.exists(){
- cprintln!("Updating system snap installation");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&snap_bin).arg("refresh").arg("-y")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- //Python
- let path = Path::new(&pip_review_bin);
- if path.exists(){
- cprintln!("Updating Python user installation via pip-review");
- let mut cmd =
- Command::new(&pip_review_bin)
- .arg("--auto").arg("--local").arg("--user")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- //Distrobox
- let path = Path::new(&distrobox_upgrade_bin);
- if path.exists(){
- cprintln!("Updating Distrobox containers");
- let mut cmd =
- Command::new(&distrobox_upgrade_bin)
- .arg("--all")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- //Podman system
- let path = Path::new(&podman_bin);
- if path.exists(){
- cprintln!("Updating Podman system containers");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&podman_bin).arg("auto-update")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- //Podman user
- let path = Path::new(&podman_bin);
- if path.exists(){
- cprintln!("Updating Podman user containers");
- let mut cmd =
- Command::new(&podman_bin)
- .arg("auto-update")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- //Podman system prune
- let path = Path::new(&podman_bin);
- if path.exists(){
- cprintln!("Pruning Podman system containers");
- let mut cmd =
- Command::new(&sudo_bin)
- .arg(&podman_bin).arg("system").arg("prune").arg("-af")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
-
- //Podman user prune
- let path = Path::new(&podman_bin);
- if path.exists(){
- cprintln!("Pruning Podman user containers");
- let mut cmd =
- Command::new(&podman_bin)
- .arg("system").arg("prune").arg("-af")
- .stdout(Stdio::inherit()).stderr(Stdio::inherit())
- .spawn().unwrap();
- let _output = cmd.wait();
- }
- }
+ let path = Path::new(&apt_bin);
+ if path.exists(){
+ cprintln!("Updating via: apt");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&apt_bin).arg("update").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&apt_bin).arg("upgrade").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_dnf() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_dnf5 = Command::new("which")
+ .arg("dnf5").stdout(Stdio::piped()).output().unwrap();
+ let mut dnf5_bin = String::from_utf8(find_dnf5.stdout).unwrap();
+ trim_newline(&mut dnf5_bin);
+
+ let find_dnf = Command::new("which")
+ .arg("dnf").stdout(Stdio::piped()).output().unwrap();
+ let mut dnf_bin = String::from_utf8(find_dnf.stdout).unwrap();
+ trim_newline(&mut dnf_bin);
+
+ let path_dnf = Path::new(&dnf_bin);
+ let path_dnf5 = Path::new(&dnf5_bin);
+
+ if path_dnf5.exists() {
+ cprintln!("dnf found but skipped since dnf5 is present");
+ cprintln!("Updating via: dnf5");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&dnf5_bin).arg("--refresh").arg("--nobest").arg("-y").arg("update")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ } else if path_dnf.exists(){
+ cprintln!("Updating via: dnf");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&dnf_bin).arg("--refresh").arg("--skip-broken").arg("--nobest").arg("-y").arg("update")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+
+}
+
+fn update_pacman() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_pacman = Command::new("which")
+ .arg("pacman").stdout(Stdio::piped()).output().unwrap();
+ let mut pacman_bin = String::from_utf8(find_pacman.stdout).unwrap();
+ trim_newline(&mut pacman_bin);
+
+ let path = Path::new(&pacman_bin);
+ if path.exists(){
+ cprintln!("Updating via: pacman");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&pacman_bin).arg("-Syu")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+
+}
+
+fn update_urpmi() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_urpmi = Command::new("which")
+ .arg("urpmi").stdout(Stdio::piped()).output().unwrap();
+ let mut urpmi_bin = String::from_utf8(find_urpmi.stdout).unwrap();
+ trim_newline(&mut urpmi_bin);
+
+ let path = Path::new(&urpmi_bin);
+ if path.exists(){
+ cprintln!("Updating via urpmi");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&urpmi_bin).arg("--auto-update").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_zypper() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_zypper = Command::new("which")
+ .arg("zypper").stdout(Stdio::piped()).output().unwrap();
+ let mut zypper_bin = String::from_utf8(find_zypper.stdout).unwrap();
+ trim_newline(&mut zypper_bin);
+
+ let path = Path::new(&zypper_bin);
+ if path.exists(){
+ cprintln!("Updating via: zypper");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&zypper_bin).arg("up").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_flatpak() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_flatpak = Command::new("which")
+ .arg("flatpak").stdout(Stdio::piped()).output().unwrap();
+ let mut flatpak_bin = String::from_utf8(find_flatpak.stdout).unwrap();
+ trim_newline(&mut flatpak_bin);
+
+ let path = Path::new(&flatpak_bin);
+ if path.exists(){
+ cprintln!("Updating user flatpak installs");
+ let mut cmd =
+ Command::new(&flatpak_bin)
+ .arg("update").arg("--user").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+ let path = Path::new(&flatpak_bin);
+ if path.exists(){
+ cprintln!("Updating system flatpak installs");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&flatpak_bin).arg("update").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_snap() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_snap = Command::new("which")
+ .arg("snap").stdout(Stdio::piped()).output().unwrap();
+ let mut snap_bin = String::from_utf8(find_snap.stdout).unwrap();
+ trim_newline(&mut snap_bin);
+
+ let path = Path::new(&snap_bin);
+ if path.exists(){
+ cprintln!("Updating user snap installation");
+ let mut cmd =
+ Command::new(&snap_bin)
+ .arg("refresh").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+ let path = Path::new(&snap_bin);
+ if path.exists(){
+ cprintln!("Updating system snap installation");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&snap_bin).arg("refresh").arg("-y")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_python() {
+ let find_pip_review = Command::new("which")
+ .arg("pip-review").stdout(Stdio::piped()).output().unwrap();
+ let mut pip_review_bin = String::from_utf8(find_pip_review.stdout).unwrap();
+ trim_newline(&mut pip_review_bin);
+
+ let path = Path::new(&pip_review_bin);
+ if path.exists(){
+ cprintln!("Updating Python user installation via pip-review");
+ let mut cmd =
+ Command::new(&pip_review_bin)
+ .arg("--auto").arg("--local").arg("--user")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_distrobox() {
+ let find_distrobox_upgrade = Command::new("which")
+ .arg("distrobox-upgrade").stdout(Stdio::piped()).output().unwrap();
+ let mut distrobox_upgrade_bin = String::from_utf8(find_distrobox_upgrade.stdout).unwrap();
+ trim_newline(&mut distrobox_upgrade_bin);
+
+ let path = Path::new(&distrobox_upgrade_bin);
+ if path.exists(){
+ cprintln!("Updating Distrobox containers");
+ let mut cmd =
+ Command::new(&distrobox_upgrade_bin)
+ .arg("--all")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn update_podman() {
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ let find_podman = Command::new("which")
+ .arg("podman").stdout(Stdio::piped()).output().unwrap();
+ let mut podman_bin = String::from_utf8(find_podman.stdout).unwrap();
+ trim_newline(&mut podman_bin);
+
+ let path = Path::new(&podman_bin);
+ if path.exists(){
+ cprintln!("Updating Podman system containers");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&podman_bin).arg("auto-update")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+
+ if path.exists(){
+ cprintln!("Updating Podman user containers");
+ let mut cmd =
+ Command::new(&podman_bin)
+ .arg("auto-update")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+
+ if path.exists(){
+ cprintln!("Pruning Podman system containers");
+ let mut cmd =
+ Command::new(&sudo_bin)
+ .arg(&podman_bin).arg("system").arg("prune").arg("-af")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+
+ if path.exists(){
+ cprintln!("Pruning Podman user containers");
+ let mut cmd =
+ Command::new(&podman_bin)
+ .arg("system").arg("prune").arg("-af")
+ .stdout(Stdio::inherit()).stderr(Stdio::inherit())
+ .spawn().unwrap();
+ let _output = cmd.wait();
+ }
+}
+
+fn main() {
+ //Clear termianl, and move cursor to 1,1 inside the terminal
+ print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
+ // Tell user that we are going to start the update procedure
+ cprintln!("osupdater : This tool will locate and run any package/container managers on your system.\n");
+
+ //Figure out if the program should ask if an update tool should be run
+ //let autoupdate_choices = vec!["Y","N"];
+ //let autoupdate_index = get_choice("Shall the application autorun each update tool?", &autoupdate_choices);
+ //println!("Selection was {}", autoupdate_choices[autoupdate_index]);
+
+ // Find sudo
+ let find_sudo = Command::new("which")
+ .arg("sudo").stdout(Stdio::piped()).output().unwrap();
+ let mut sudo_bin = String::from_utf8(find_sudo.stdout).unwrap();
+ trim_newline(&mut sudo_bin);
+
+ // Check package managers
+ cprintln!("Looking for native package managers.\n");
+ update_apt();
+ update_dnf();
+ update_pacman();
+ update_urpmi();
+ update_zypper();
+
+ // Check container formats
+ cprintln!("Checking application containers");
+ update_flatpak();
+ update_snap();
+ update_python();
+ update_distrobox();
+ update_podman();
}