From 8e7b7cc3cb1826e95ea9dd6023668672783e2058 Mon Sep 17 00:00:00 2001
From: Amy
Date: Sat, 18 Dec 2021 00:01:25 +0100
Subject: [PATCH] added feature to backup already existing binaries and being
able to restore from them
---
README.md | 30 ++++++++++++++++++++++++++++++
pkg-warner | 1 +
src/main.rs | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 71 insertions(+)
create mode 100644 README.md
create mode 120000 pkg-warner
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..dbefbca
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
pkg manager warner
+
+
+
+ a tool to warn users when using the wrong package manager
+
+
+## Usage:
+| Action | shorthand flag | long flag |
+| ------ | ------ | ------ |
+| Show a help message | pkg-warner -h | pkg-warner help |
+| Show the version | pkg-warner -v | pkg-warner version |
+| initialize the database | ame -i | ame init |
+| create all the scripts | pkg-warner -c | pkg-warner create-script |
+| Show the warning for specified package manager | pkg-warner -w \ | pkg-warner warning \ |
+
+## Installation for Non-Crystal systems:
+If you're on an arch (deriviate), you can use the PKGBUILD in [packages/pkg-warner](https://git.getcryst.al/crystal/packages-x86_64/src/branch/master/pkg-warner)
+If you're on a different distribution you can use these commands:
+```sh
+git clone https://git.getcryst.al/crystal/pkg-manager-warner.git
+cd pkg-manager-warner
+sudo make install
+```
\ No newline at end of file
diff --git a/pkg-warner b/pkg-warner
new file mode 120000
index 0000000..daef616
--- /dev/null
+++ b/pkg-warner
@@ -0,0 +1 @@
+target/debug/pkg-warner
\ No newline at end of file
diff --git a/src/main.rs b/src/main.rs
index 407cb54..015d358 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -76,10 +76,32 @@ pub fn add_mngrs(pkg_managers: Vec>, proper_manager: String) {
pub fn create_script() {
let connection = sqlite::open("/usr/share/pkg_warner/pkg_mngrs.db").unwrap();
+ let path = std::path::Path::new("/usr/share/pkg_warner/backs/");
let result = connection.iterate(
format!("SELECT mngr FROM pkg_mngrs WHERE mngr IS NOT \"proper_manager\";"),
|pairs| {
for &(_column, value) in pairs.iter() {
+ if std::path::Path::new(&format!("/usr/bin/{}", value.unwrap())).exists() {
+ if !path.is_dir() {
+ let result = std::fs::create_dir_all("/usr/share/pkg_warner/backs/".to_string());
+ match result {
+ Ok(_) => {
+ println!("Created path for binary backups (previously missing)");
+ }
+ Err(_) => {
+ println!("Couldn't create path for binary backups (/usr/share/pkg_warner/backs)")
+ }
+ }
+ }
+ let result = std::fs::copy(&format!("/usr/bin/{}", value.unwrap()), &format!("/usr/share/pkg_warner/backs/{}", value.unwrap()));
+ match result {
+ Ok(_) => {
+ }
+ Err(_) => {
+ println!("Couldn't back up {}", value.unwrap());
+ }
+ }
+ }
writeln!(&mut fs::File::create(format!("/usr/bin/{}",value.unwrap())).unwrap(), "#!/usr/bin/env bash\n pkg-warner -w {}", value.unwrap()).unwrap();
Command::new("chmod")
.arg("+x")
@@ -162,6 +184,21 @@ pub fn warn(proper_manager: String, package_manager: String) {
}
}
+pub fn res_bin() {
+ for file in fs::read_dir("/usr/share/pkg_warner/backs/").unwrap() {
+ let path = file.unwrap().path().display().to_string();
+ let result = std::fs::copy(&format!("{}", path), format!("/usr/bin/{}", path.to_string().replace("/usr/share/pkg_warner/backs/", "")));
+ match result {
+ Ok(_) => {
+ println!("Restored {}", path);
+ }
+ Err(_) => {
+ println!("Couldn't restore {}", path);
+ }
+ }
+ }
+}
+
fn main() {
let args: Vec = env::args().skip(1).collect();
@@ -234,6 +271,9 @@ fn main() {
rem_mngr(pkgs_to_remove);
}
}
+ "-res" | "restore" => {
+ res_bin();
+ }
_ => {
help();
}