use std::fs;
use std::path::Path;
use rayon::iter::*;
use walkdir::WalkDir;
#[allow(dead_code)] #[allow(clippy::branches_sharing_code)]
pub(crate) fn bin_path() -> String {
let target_dir = cargo_metadata::MetadataCommand::new()
.exec()
.unwrap()
.target_directory;
let path_release = if cfg!(windows) {
let mut td = target_dir.clone();
td.push("release");
td.push("cargo-cache.exe");
td
} else {
let mut td = target_dir.clone();
td.push("release");
td.push("cargo-cache");
td
};
let path_debug = if cfg!(windows) {
let mut td = target_dir;
td.push("debug");
td.push("cargo-cache.exe");
td
} else {
let mut td = target_dir;
td.push("debug");
td.push("cargo-cache");
td
};
if path_release.is_file() {
path_release.into_string()
} else if path_debug.is_file() {
path_debug.into_string()
} else {
panic!("No cargo-cache executable found!");
}
}
#[allow(dead_code)] pub(crate) fn assert_path_end(path: &Path, wanted_vector: &[&str]) {
let components = path.components().map(|c| c.as_os_str().to_str().unwrap());
let components_vec: Vec<&str> = components.collect();
let wanted_len = components_vec.len() - wanted_vector.len();
let is: &[&str] = &components_vec[wanted_len..];
assert_eq!(is, wanted_vector);
}
#[allow(dead_code)]
pub(crate) fn dir_size(dir: &Path) -> u64 {
if !dir.is_dir() {
return 0;
}
let walkdir_start = dir.display().to_string();
let dir_size = WalkDir::new(&walkdir_start)
.into_iter()
.map(|e| e.unwrap().path().to_owned())
.filter(|f| f.exists()) .collect::<Vec<_>>() .par_iter()
.filter(|f| f.exists()) .map(|f| {
fs::metadata(f)
.unwrap_or_else(|_| panic!("Failed to get metadata of file '{}'", &f.display()))
.len()
})
.sum();
dir_size
}