pack/src/main.rs

73 lines
2.3 KiB
Rust
Raw Normal View History

2019-09-03 10:37:49 +00:00
use std::fs::File;
2019-09-03 15:44:47 +00:00
use std::path::Path;
2019-09-03 22:38:25 +00:00
use std::io::Read;
2019-09-03 23:17:02 +00:00
use std::result::Result;
2019-09-03 10:37:49 +00:00
2019-09-03 23:17:02 +00:00
use reqwest::IntoUrl;
2019-09-03 10:37:49 +00:00
use reqwest::Client;
use reqwest::header::ETAG;
2019-09-03 21:41:20 +00:00
use smush::decode;
2019-09-03 10:37:49 +00:00
fn main() -> Result<(), std::io::Error> {
let client = Client::new();
2019-09-03 15:23:13 +00:00
let args: Vec<_> = std::env::args().collect();
if args.len() < 2 {
2019-09-03 22:38:25 +00:00
println!("[PACK]: Please enter a package name...");
std::process::exit(1);
2019-09-03 15:23:13 +00:00
}
let split = args[1].as_str().split("::");
let vec: Vec<&str> = split.collect();
2019-09-03 15:44:47 +00:00
2019-09-03 22:38:25 +00:00
println!("[PACK]: Downloading {}", vec[0]);
2019-09-03 21:41:20 +00:00
if !Path::new(format!("/usr/pack/repo/{}", vec[1]).as_str()).exists() {
2019-09-03 22:38:25 +00:00
println!("[PACK]: Path /usr/pack/repo/{} does not exist. Please setup your environment.", vec[1]);
2019-09-03 15:44:47 +00:00
std::process::exit(1);
}
2019-09-03 22:38:25 +00:00
let full_path: Vec<&str> = vec[0].split("/").collect();
let pkgname = full_path[full_path.len() - 1];
2019-09-03 23:17:02 +00:00
let repo = match vec[1] {
"arch" => "http://mirrors.advancedhosters.com/archlinux/core/os/x86_64/",
_ => {
println!("Repo {} is not supported...", vec[1]);
std::process::exit(0);
},
};
2019-09-03 10:37:49 +00:00
2019-09-03 23:17:02 +00:00
print!("Making request...");
let url = reqwest::Url::parse(&(repo.to_string() + pkgname)).expect("Failed to parse URL");
let mut resp = client.get(url)
.send().expect("Failed to make request");
2019-09-03 10:37:49 +00:00
if resp.status().is_success() {
2019-09-03 21:41:20 +00:00
println!("OK");
2019-09-03 10:37:49 +00:00
if let Some(etag) = resp.headers().get(ETAG) {
std::fs::write("etag", etag.as_bytes()).expect("Failed to write ETAG...");
}
2019-09-03 22:38:25 +00:00
let mut file = match File::create(format!("/usr/pack/repo/{}/tarballs/{}", vec[1], pkgname)) {
2019-09-03 15:23:13 +00:00
Ok(res) => res,
2019-09-03 22:38:25 +00:00
Err(e) => {
println!("Failed to create file...did you setup you environment? Do you have permission to create files?");
println!("\nError: {}", e);
2019-09-03 15:23:13 +00:00
std::process::exit(1);
}
};
2019-09-03 10:37:49 +00:00
resp.copy_to(&mut file).expect("failed to write file");
2019-09-03 21:41:20 +00:00
} else {
println!("FAIL!");
std::process::exit(1);
2019-09-03 10:37:49 +00:00
}
2019-09-03 22:38:25 +00:00
let mut archive = File::open(format!("/usr/pack/repo/{}/tarballs/{}", vec[1], pkgname)).expect("Failed to open tar...");
2019-09-03 21:41:20 +00:00
let mut tar = Vec::new();
archive.read_to_end(&mut tar).expect("Failed to read tar...");
2019-09-03 10:37:49 +00:00
Ok(())
}