|
|
|
@ -1,7 +1,30 @@
|
|
|
|
|
use crate::mods::strs::{err_unrec, inf, sec, succ};
|
|
|
|
|
//use crate::mods::strs::{err_unrec, inf, sec, succ};
|
|
|
|
|
use crate::{
|
|
|
|
|
err_unrec, inf, inssort, mods::strs::prompt, mods::strs::sec, mods::strs::succ,
|
|
|
|
|
mods::uninstall::uninstall, mods::database::addPkg
|
|
|
|
|
};
|
|
|
|
|
use runas::Command;
|
|
|
|
|
use std::{env, fs};
|
|
|
|
|
use std::{env, fs, path::Path};
|
|
|
|
|
use toml;
|
|
|
|
|
use git2::Repository;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn uninstall_make_depend(pkg: &str) {
|
|
|
|
|
let make_depends = raur::info(&[&pkg]).unwrap()[0].make_depends.clone();
|
|
|
|
|
|
|
|
|
|
if make_depends.len() != 0 {
|
|
|
|
|
inf(format!(
|
|
|
|
|
"{} installed following make dependencies: {}",
|
|
|
|
|
pkg,
|
|
|
|
|
make_depends.join(", ")
|
|
|
|
|
));
|
|
|
|
|
let remove = prompt(format!("Would you like to remove them?"));
|
|
|
|
|
if remove == true {
|
|
|
|
|
uninstall(true, make_depends);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
succ(format!("Succesfully upgraded {}", pkg));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn upgrade(noconfirm: bool) {
|
|
|
|
|
let homepath = std::env::var("HOME").unwrap();
|
|
|
|
@ -48,71 +71,139 @@ pub fn upgrade(noconfirm: bool) {
|
|
|
|
|
println!("{:?}", dbParsed);
|
|
|
|
|
for entry in dbParsed.as_table() {
|
|
|
|
|
for (key, value) in &*entry {
|
|
|
|
|
//println!("{} / {}", key, value);
|
|
|
|
|
for (option, entry) in {
|
|
|
|
|
println!("{} / {}", option, entry);
|
|
|
|
|
}
|
|
|
|
|
//if key.contains("name") {
|
|
|
|
|
/* println!("{}",value);
|
|
|
|
|
let results = raur::search(format!("{}",entry["paru"]));
|
|
|
|
|
println!("{}",format!("{}",entry));
|
|
|
|
|
let mut test = value.to_string().replace("\"", "");
|
|
|
|
|
test = test.replace("version", "").replace("name","");
|
|
|
|
|
test = test.replace("=", "");
|
|
|
|
|
println!("{}",test.replace(" ",""));*/
|
|
|
|
|
//let results = raur::search(format!("{}",value));
|
|
|
|
|
//for res in results {
|
|
|
|
|
// println!("{}",&res[0].name);
|
|
|
|
|
//}
|
|
|
|
|
/*} else if key.contains("version") {
|
|
|
|
|
if value.as_integer() == lVersion {
|
|
|
|
|
println!("upgrading");
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let results = raur::search(format!("{}",key));
|
|
|
|
|
for res in results {
|
|
|
|
|
println!("{}",&res[0].name);
|
|
|
|
|
let url = format!("https://aur.archlinux.org/{}.git", key);
|
|
|
|
|
let package = raur::info(&[key]).unwrap();
|
|
|
|
|
let version = value.to_string().replace("name", "").replace("version","").replace(" = ","").replace("\"","").replace(format!("{}",&res[0].name.to_string()).as_str(),"");
|
|
|
|
|
let name = value.to_string().replace("name", "").replace("version","").replace(" = ","").replace("\"","").replace(format!("{}",&res[0].version.to_string()).as_str(),"");
|
|
|
|
|
println!("{} / {}",name,version);
|
|
|
|
|
if res[0].version.contains(&version) {
|
|
|
|
|
let keydir = format!("{}{}",&cachedir,&key);
|
|
|
|
|
if std::path::Path::new(&keydir).is_dir() {
|
|
|
|
|
let cd_result = env::set_current_dir(&keydir);
|
|
|
|
|
match cd_result {
|
|
|
|
|
Ok(_) => inf(format!("Entered package directory")),
|
|
|
|
|
Err(_) => err_unrec(format!("Could not enter package directory")),
|
|
|
|
|
}
|
|
|
|
|
inssort(true, package[0].depends.clone());
|
|
|
|
|
|
|
|
|
|
/*for file in std::fs::read_dir(&cachedir).unwrap() {
|
|
|
|
|
let dir = &file.unwrap().path();
|
|
|
|
|
let output = std::process::Command::new("git")
|
|
|
|
|
.arg("pull")
|
|
|
|
|
.output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let update_available = String::from_utf8(output.stdout).unwrap();
|
|
|
|
|
|
|
|
|
|
let cd_result = env::set_current_dir(&dir);
|
|
|
|
|
match cd_result {
|
|
|
|
|
Ok(_) => inf(format!("Entered AUR package directory to pull changes")),
|
|
|
|
|
Err(_) => err_unrec(format!(
|
|
|
|
|
"Could not enter AUR package directory to pull changes"
|
|
|
|
|
)),
|
|
|
|
|
}
|
|
|
|
|
sec(format!("Installing {} ...", &key));
|
|
|
|
|
let install_result = std::process::Command::new("makepkg")
|
|
|
|
|
.arg("-si")
|
|
|
|
|
.arg("--noconfirm")
|
|
|
|
|
.arg("--needed")
|
|
|
|
|
.status();
|
|
|
|
|
match install_result {
|
|
|
|
|
Ok(_) => {
|
|
|
|
|
uninstall_make_depend(&key);
|
|
|
|
|
}
|
|
|
|
|
Err(_) => {
|
|
|
|
|
err_unrec(format!("Couldn't install {}", &key));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
sec(format!("Installing {} ...", &key));
|
|
|
|
|
let install_result = std::process::Command::new("makepkg")
|
|
|
|
|
.arg("-si")
|
|
|
|
|
.arg("--needed")
|
|
|
|
|
.status()
|
|
|
|
|
.expect("Couldn't call makepkg");
|
|
|
|
|
match install_result.code() {
|
|
|
|
|
Some(0) => {
|
|
|
|
|
uninstall_make_depend(&key);
|
|
|
|
|
}
|
|
|
|
|
Some(_) => {
|
|
|
|
|
err_unrec(format!("Couldn't install {}", &key));
|
|
|
|
|
}
|
|
|
|
|
None => {
|
|
|
|
|
err_unrec(format!("Couldn't install {}", &key));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
inf(format!("Cloning {} ...", &key));
|
|
|
|
|
|
|
|
|
|
if Path::new(&keydir).is_dir() {
|
|
|
|
|
let rm_result = fs::remove_dir_all(&keydir);
|
|
|
|
|
match rm_result {
|
|
|
|
|
Ok(_) => inf(format!(
|
|
|
|
|
"Package path for {} already found. Removing to reinstall",
|
|
|
|
|
&key
|
|
|
|
|
)),
|
|
|
|
|
Err(_) => err_unrec(format!(
|
|
|
|
|
"Package path for {} already found, but could not remove to reinstall",
|
|
|
|
|
&key
|
|
|
|
|
)),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let dir_result = fs::create_dir(&keydir);
|
|
|
|
|
match dir_result {
|
|
|
|
|
Ok(_) => inf(format!("Created package directory for {}", &key)),
|
|
|
|
|
Err(_) => err_unrec(format!("Couldn't create package directory for {}", &key)),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let cd_result = env::set_current_dir(&keydir);
|
|
|
|
|
match cd_result {
|
|
|
|
|
Ok(_) => inf(format!("Entered package directory")),
|
|
|
|
|
Err(_) => err_unrec(format!("Could not enter package directory")),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inssort(true, package[0].depends.clone());
|
|
|
|
|
|
|
|
|
|
let clone = Repository::clone(&url, Path::new(&keydir));
|
|
|
|
|
match clone {
|
|
|
|
|
Ok(_) => {
|
|
|
|
|
inf(format!("Cloning {} into package directory", &key));
|
|
|
|
|
}
|
|
|
|
|
Err(_) => err_unrec(format!("Failed cloning {} into package directory", &key)),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sec(format!("Installing {} ...", &key));
|
|
|
|
|
let install_result = std::process::Command::new("makepkg")
|
|
|
|
|
.arg("-si")
|
|
|
|
|
.arg("--noconfirm")
|
|
|
|
|
.arg("--needed")
|
|
|
|
|
.status();
|
|
|
|
|
match install_result {
|
|
|
|
|
Ok(_) => {
|
|
|
|
|
uninstall_make_depend(&key);
|
|
|
|
|
}
|
|
|
|
|
Err(_) => {
|
|
|
|
|
err_unrec(format!("Couldn't install {}", &key));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
sec(format!("Installing {} ...", &key));
|
|
|
|
|
let install_result = std::process::Command::new("makepkg")
|
|
|
|
|
.arg("-si")
|
|
|
|
|
.arg("--needed")
|
|
|
|
|
.status()
|
|
|
|
|
.expect("Couldn't call makepkg");
|
|
|
|
|
match install_result.code() {
|
|
|
|
|
Some(0) => {
|
|
|
|
|
uninstall_make_depend(&key);
|
|
|
|
|
}
|
|
|
|
|
Some(_) => {
|
|
|
|
|
err_unrec(format!("Couldn't install {}", &key));
|
|
|
|
|
}
|
|
|
|
|
None => {
|
|
|
|
|
err_unrec(format!("Couldn't install {}", &key));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
println!("not upgrading!");
|
|
|
|
|
if std::path::Path::new(&format!("{}{}",&cachedir,&key)).is_dir() {
|
|
|
|
|
println!("not cloning");
|
|
|
|
|
} else {
|
|
|
|
|
println!("cloning");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if update_available != "Already up to date." {
|
|
|
|
|
let path_as_str = &dir.display().to_string();
|
|
|
|
|
let pkg: Vec<&str> = path_as_str.split("/").collect();
|
|
|
|
|
|
|
|
|
|
inf(format!("{} is up to date", pkg[pkg.len() - 1]));
|
|
|
|
|
} else {
|
|
|
|
|
let cd2_result = env::set_current_dir(&dir);
|
|
|
|
|
match cd2_result {
|
|
|
|
|
Ok(_) => inf(format!(
|
|
|
|
|
"Entering AUR package directory to install new version"
|
|
|
|
|
)),
|
|
|
|
|
Err(_) => err_unrec(format!(
|
|
|
|
|
"Couldn't enter AUR package directory to install new version"
|
|
|
|
|
)),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let makepkg_result = std::process::Command::new("makepkg")
|
|
|
|
|
.arg("-si")
|
|
|
|
|
.status()
|
|
|
|
|
.expect("Couldn't call makepkg");
|
|
|
|
|
match makepkg_result.code() {
|
|
|
|
|
Some(0) => succ(format!("New AUR package version installed")),
|
|
|
|
|
Some(_) => err_unrec(format!("Couldn't install new AUR package version")),
|
|
|
|
|
None => err_unrec(format!("Couldn't install new AUR package version")),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|