change Version from str to Version type and sort by each segment of version so as to properly sort versions like 1.10.0
This commit is contained in:
parent
2b3a26b1a3
commit
4d99e76218
34
src/main.rs
34
src/main.rs
|
@ -24,15 +24,34 @@ const BOT_NAME: &str = "Update Bot";
|
||||||
|
|
||||||
const LAST_OFFERED_KEY: &str = "profile.last_version_offered";
|
const LAST_OFFERED_KEY: &str = "profile.last_version_offered";
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
struct Version {
|
||||||
|
major: u8,
|
||||||
|
minor: u8,
|
||||||
|
fix: u8,
|
||||||
|
path: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
struct UpdateBot {
|
struct UpdateBot {
|
||||||
versions_dirs: Vec<PathBuf>,
|
versions_dirs: Vec<Version>,
|
||||||
latest_version: PathBuf,
|
latest_version: PathBuf,
|
||||||
version: String,
|
version: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Version {
|
||||||
|
pub fn new(path: PathBuf) -> Self {
|
||||||
|
let vs = path.to_str().unwrap().strip_prefix(DIST_DIR).unwrap().trim_start_matches("/v");
|
||||||
|
let parts: Vec<&str> = vs.split(".").collect();
|
||||||
|
if parts.len() != 3 {
|
||||||
|
return Version{ major: 0, minor: 0, fix: 0, path: PathBuf::new()}
|
||||||
|
}
|
||||||
|
return Version{ major: parts[0].parse::<u8>().unwrap(), minor: parts[1].parse::<u8>().unwrap(), fix: parts[2].parse::<u8>().unwrap(), path: path}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl UpdateBot {
|
impl UpdateBot {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let mut versions_dirs = vec![];
|
let mut versions_dirs: Vec<Version> = vec![];
|
||||||
for entry in
|
for entry in
|
||||||
read_dir(Path::new(DIST_DIR)).expect(&format!("could not open '{}' dir", DIST_DIR))
|
read_dir(Path::new(DIST_DIR)).expect(&format!("could not open '{}' dir", DIST_DIR))
|
||||||
{
|
{
|
||||||
|
@ -40,16 +59,19 @@ impl UpdateBot {
|
||||||
let path: PathBuf = entry.path();
|
let path: PathBuf = entry.path();
|
||||||
if path.is_dir() {
|
if path.is_dir() {
|
||||||
println!("version: {}", path.to_str().unwrap());
|
println!("version: {}", path.to_str().unwrap());
|
||||||
versions_dirs.push(path);
|
//versions_dirs.push(path.clone());
|
||||||
|
let v = Version::new(path);
|
||||||
|
println!("{:?}", v);
|
||||||
|
versions_dirs.push(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if versions_dirs.len() == 0 {
|
if versions_dirs.len() == 0 {
|
||||||
panic!("no cwtch versions detected in {}!", DIST_DIR)
|
panic!("no cwtch versions detected in {}!", DIST_DIR)
|
||||||
}
|
}
|
||||||
versions_dirs.sort();
|
versions_dirs.sort_unstable_by_key(|item| (item.major, item.minor, item.fix));
|
||||||
println!("sorted vd: {:?}", versions_dirs);
|
println!("sorted vd: {:?}", versions_dirs);
|
||||||
let latest_version = versions_dirs[versions_dirs.len() - 1].clone();
|
let latest_version = versions_dirs[versions_dirs.len() - 1].clone();
|
||||||
let version: String = latest_version
|
let version: String = latest_version.path
|
||||||
.strip_prefix(DIST_DIR)
|
.strip_prefix(DIST_DIR)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.to_str()
|
.to_str()
|
||||||
|
@ -57,7 +79,7 @@ impl UpdateBot {
|
||||||
.to_string();
|
.to_string();
|
||||||
let bot = UpdateBot {
|
let bot = UpdateBot {
|
||||||
versions_dirs: versions_dirs,
|
versions_dirs: versions_dirs,
|
||||||
latest_version: latest_version,
|
latest_version: latest_version.path,
|
||||||
version: version,
|
version: version,
|
||||||
};
|
};
|
||||||
println!("versions: {:?}\n", bot.versions_dirs);
|
println!("versions: {:?}\n", bot.versions_dirs);
|
||||||
|
|
Loading…
Reference in New Issue