From 3b8d2c5d99663454b2ab79599ccbaac2c42b8518 Mon Sep 17 00:00:00 2001 From: jnats Date: Sat, 17 Jul 2021 01:36:41 +0100 Subject: [PATCH] initial commit --- .gitignore | 1 + Cargo.toml | 11 +++++++++++ Makefile | 6 ++++++ src/clone.rs | 31 +++++++++++++++++++++++++++++++ src/help.rs | 7 +++++++ src/main.rs | 26 ++++++++++++++++++++++++++ src/uninstall.rs | 10 ++++++++++ 7 files changed, 92 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 Makefile create mode 100644 src/clone.rs create mode 100644 src/help.rs create mode 100644 src/main.rs create mode 100644 src/uninstall.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..f70501e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "ame" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +git2 = "*" +serde_json = "*" +ureq = "*" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..05d30ec --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +debug: + cargo build +release: + cargo build --release +clean: + rm -rf target/ Cargo.lock diff --git a/src/clone.rs b/src/clone.rs new file mode 100644 index 0000000..042b162 --- /dev/null +++ b/src/clone.rs @@ -0,0 +1,31 @@ +use git2::Repository; +use std::{fs, path::Path, process::exit}; +use serde_json::Value; + +pub fn clone(pkg: &str) { + let url = format!("https://aur.archlinux.org/{}.git", pkg); + let aurl = format!("https://aur.archlinux.org/packages/{}", pkg); + let ajsurl = format!("https://aur.archlinux.org/rpc/?v=5&type=info&arg={}", pkg); + let homedir = std::env::var("HOME").unwrap(); + let cachedir = format!("{}/.cache/ame/{}", homedir, pkg); + let path = Path::new(&cachedir); + + if path.exists() { + fs::remove_dir_all(path).unwrap(); + } + + let aresp = ureq::get(&aurl).call().unwrap_or_else(|error| { + println!("{}", error); + exit(1); + }); + + if aresp.status() == 200 { + println!("Cloning {} ...", pkg); + Repository::clone(&url, &path).unwrap(); + } else { + println!("Error, repository {} not found", pkg); + } + + println!("{}", deps); + +} diff --git a/src/help.rs b/src/help.rs new file mode 100644 index 0000000..e4c1648 --- /dev/null +++ b/src/help.rs @@ -0,0 +1,7 @@ +pub fn help() { + println!("\ +Usage:\n +\"ame -S pkg\" - install a package +\"ame -R pkg\" - remove a package\ + ") +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..16ec0fc --- /dev/null +++ b/src/main.rs @@ -0,0 +1,26 @@ +mod clone; +mod uninstall; +mod help; +use crate::{clone::clone, help::help, uninstall::uninstall}; +use std::{env, process::exit}; + +fn main() { + let args: Vec = env::args().collect(); + + if args.len() < 3 { + help(); + exit(0); + } + + let oper = &args[1]; + + if oper == "-S" { + for arg in env::args().skip(2) { + clone(&arg); + } + } else if oper == "-R" { + for arg in env::args().skip(2) { + uninstall(&arg); + } + } +} diff --git a/src/uninstall.rs b/src/uninstall.rs new file mode 100644 index 0000000..980411b --- /dev/null +++ b/src/uninstall.rs @@ -0,0 +1,10 @@ +use std::process::Command; + +pub fn uninstall(pkg: &str) { + let errstr = format!("Could not remove package {}", pkg); + Command::new("pacman") + .arg("-R") + .arg(&pkg) + .output() + .expect(&errstr); +}