From 94af1ffe75d302003fb2ce4ceadb7a1cf8318530 Mon Sep 17 00:00:00 2001 From: michal Date: Sat, 4 Dec 2021 21:32:29 +0000 Subject: [PATCH] fixed #9 --- src/mods/clone.rs | 12 ++++-------- src/mods/inssort.rs | 14 +++++++++++--- src/mods/rpc.rs | 10 ++++------ 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/mods/clone.rs b/src/mods/clone.rs index cd9bf2d..264cd1d 100644 --- a/src/mods/clone.rs +++ b/src/mods/clone.rs @@ -1,15 +1,12 @@ use crate::{ err_unrec, inf, mods::database::add_pkg, mods::purge::purge, mods::rpc::*, mods::strs::prompt, - mods::strs::sec, mods::strs::succ, + mods::strs::sec, mods::strs::succ, inssort }; use moins::Moins; use std::{env, fs, path::Path, process::Command}; fn uninstall_make_depend(pkg: &str) { // uninstall make depends of a package - - // gets the "make_depends" field of the package using rpcinfo() - // let make_depends = rpcinfo(pkg)[0].make_depends; let make_depends = rpcinfo(pkg).make_depends; let explicit_packages = Command::new("pacman") @@ -52,6 +49,7 @@ pub fn clone(noconfirm: bool, as_dep: bool, pkg: &str) { let path = Path::new(&cachedir); let pkgdir = format!("{}/{}", &cachedir, &pkg); let search = rpcsearch(pkg).results; + let package = search.first().unwrap(); if search.is_empty() { err_unrec("No matching AUR packages found".to_string()); } @@ -99,15 +97,13 @@ pub fn clone(noconfirm: bool, as_dep: bool, pkg: &str) { } sec("Installing AUR package depends".to_string()); - - // inssort(noconfirm, true, package[0].depends.clone()); - + let clone = std::process::Command::new("git") .arg("clone") .arg(&url) .arg(&pkgdir) .status() - .expect("couldnt clone repository"); + .expect("Couldn't clone repository"); match clone.code() { Some(0) => { inf(format!("Cloning {} into package directory", pkg)); diff --git a/src/mods/inssort.rs b/src/mods/inssort.rs index 3da6dd0..d24f97f 100644 --- a/src/mods/inssort.rs +++ b/src/mods/inssort.rs @@ -1,4 +1,4 @@ -use crate::{clone, err_unrec, install, mods::strs::sec}; +use crate::{clone, err_unrec, install, mods::strs::sec, mods::rpc::*}; use regex::Regex; use std::process::{Command, Stdio}; @@ -6,8 +6,8 @@ pub fn inssort(noconfirm: bool, as_dep: bool, pkgs: Vec) { // TODO: understand what the fuck is actually going on here let mut repo = vec![]; let mut aur = vec![]; - let re = Regex::new(r"(\S+)((?:>=|<=)\S+$)").unwrap(); - let reg = Regex::new(r"((?:>=|<=)\S+$)").unwrap(); + let re = Regex::new(r"(\S+)((?:>=|<=|>|<)\S+$)").unwrap(); + let reg = Regex::new(r"((?:>=|<=|>|<)\S+$)").unwrap(); for pkg in pkgs { match pkg.contains('/') { true => match pkg.split('/').collect::>()[0] == "aur" { @@ -83,6 +83,8 @@ pub fn inssort(noconfirm: bool, as_dep: bool, pkgs: Vec) { for a in aur { sec(format!("Couldn't find {} in repos. Searching AUR", a)); + let md = &rpcinfo(&a).make_depends; + inssort(noconfirm, true, md.to_vec()); clone(noconfirm, false, &a); } } else { @@ -93,6 +95,8 @@ pub fn inssort(noconfirm: bool, as_dep: bool, pkgs: Vec) { for a in aur { sec(format!("Couldn't find {} in repos. Searching AUR", a)); + let md = &rpcinfo(&a).make_depends; + inssort(noconfirm, true, md.to_vec()); clone(noconfirm, true, &a); } } @@ -184,6 +188,8 @@ pub fn inssort_from_file(noconfirm: bool, as_dep: bool, file: &str) { for a in aur { sec(format!("Couldn't find {} in repos. Searching AUR", a)); + let md = &rpcinfo(&a).make_depends; + inssort(noconfirm, true, md.to_vec()); clone(noconfirm, false, &a); } } else { @@ -194,6 +200,8 @@ pub fn inssort_from_file(noconfirm: bool, as_dep: bool, file: &str) { for a in aur { sec(format!("Couldn't find {} in repos. Searching AUR", a)); + let md = &rpcinfo(&a).make_depends; + inssort(noconfirm, true, md.to_vec()); clone(noconfirm, true, &a); } } diff --git a/src/mods/rpc.rs b/src/mods/rpc.rs index a58b123..be9cc13 100644 --- a/src/mods/rpc.rs +++ b/src/mods/rpc.rs @@ -1,4 +1,4 @@ -#[derive(serde::Deserialize, Debug)] +#[derive(serde::Deserialize, Debug, Clone)] pub struct Package { #[serde(rename = "Name")] pub name: String, @@ -24,18 +24,16 @@ pub fn rpcinfo(pkg: &str) -> Package { let res = reqwest::blocking::get(&format!( "https://aur.archlinux.org/rpc/?v=5&type=info&arg={}", pkg - )) - .unwrap(); + )).unwrap(); - res.json().unwrap() + res.json::().unwrap().results[0].clone() } pub fn rpcsearch(pkg: &str) -> SearchResults { let res = reqwest::blocking::get(&format!( "https://aur.archlinux.org/rpc/?v=5&type=search&arg={}", pkg - )) - .unwrap(); + )).unwrap(); res.json().unwrap() }