feat: add list_versions

This commit is contained in:
2020-07-26 00:24:31 +08:00
parent 12e07bc44b
commit b2ab9e9bfd

View File

@@ -1,10 +1,59 @@
use std::fs;
use std::path::PathBuf;
pub fn _get_script_base_path(base: &PathBuf, file_name: &str) -> PathBuf {
let mut file_name_chars = file_name.chars();
let path = base.join(file_name_chars.next().unwrap_or('_').to_string())
.join(file_name_chars.next().unwrap_or('_').to_string())
.join(file_name_chars.next().unwrap_or('_').to_string())
let mut fn_chars = file_name.chars().take_while(|c| *c != '.');
let path = base.join(fn_chars.next().unwrap_or('_').to_string())
.join(fn_chars.next().unwrap_or('_').to_string())
.join(fn_chars.next().unwrap_or('_').to_string())
.join(file_name);
path
}
pub fn _list_versions(script_base_path: &PathBuf) -> Vec<(PathBuf, String)> {
let mut ret = vec![];
match fs::read_dir(script_base_path) {
Err(e) => error!("Read dir: {:?}, error: {}", script_base_path, e),
Ok(paths) => for path in paths {
match path {
Err(e) => error!("List dir: {:?}, error: {}", script_base_path, e),
Ok(path) => if path.path().is_dir() {
trace!("Found dir: {:?}", path);
match path.file_name().to_str() {
None => error!("Get path file name: {:?}, is none", path),
Some(file_name) => if file_name.starts_with("v") {
let ver = get_dir_ver(&file_name);
ret.push((path.path(), ver));
},
}
},
}
},
}
ret
}
fn get_dir_ver(dir_name: &str) -> String {
dir_name.chars().skip_while(|c| *c != '-').skip(1).collect::<String>()
}
#[test]
fn test_get_dir_ver() {
assert_eq!("".to_owned(), get_dir_ver(""));
assert_eq!("".to_owned(), get_dir_ver("v0001"));
assert_eq!("".to_owned(), get_dir_ver("v00011.0"));
assert_eq!("0.0.1".to_owned(), get_dir_ver("v0001-0.0.1"));
assert_eq!("1.0.1".to_owned(), get_dir_ver("v0001-1.0.1"));
}
#[test]
fn test_get_script_base_path() {
use std::str::FromStr;
let base = PathBuf::from_str("/sample").unwrap();
let script_base_path = _get_script_base_path(&base, "s.crs");
assert_eq!(PathBuf::from_str("/sample/s/_/_/s.crs").unwrap(), script_base_path);
let script_base_path = _get_script_base_path(&base, "sa.crs");
assert_eq!(PathBuf::from_str("/sample/s/a/_/sa.crs").unwrap(), script_base_path);
let script_base_path = _get_script_base_path(&base, "sample.crs");
assert_eq!(PathBuf::from_str("/sample/s/a/m/sample.crs").unwrap(), script_base_path);
}