fetch: use flexver for file selection
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ia01283a5665ac9497858821f13a7751d6a6a6964
This commit is contained in:
parent
66317d98de
commit
af3cdbf343
1 changed files with 21 additions and 14 deletions
35
src/fetch.rs
35
src/fetch.rs
|
|
@ -11,8 +11,8 @@ use tokio::sync::Semaphore;
|
|||
|
||||
use crate::{
|
||||
error::{PakkerError, Result},
|
||||
model::{Config, LockFile, Project, ProjectFile},
|
||||
utils::verify_hash,
|
||||
model::{Config, LockFile, Project, ProjectFile, UpdateStrategy},
|
||||
utils::{FlexVer, verify_hash},
|
||||
};
|
||||
|
||||
/// Maximum number of concurrent downloads
|
||||
|
|
@ -326,18 +326,25 @@ impl Fetcher {
|
|||
)));
|
||||
}
|
||||
|
||||
// Prefer release over beta over alpha
|
||||
let best = compatible_files
|
||||
.iter()
|
||||
.max_by_key(|f| {
|
||||
let type_priority = match f.release_type {
|
||||
crate::model::ReleaseType::Release => 3,
|
||||
crate::model::ReleaseType::Beta => 2,
|
||||
crate::model::ReleaseType::Alpha => 1,
|
||||
};
|
||||
(type_priority, &f.date_published)
|
||||
})
|
||||
.unwrap();
|
||||
// Select best file based on update strategy
|
||||
let best = if project.update_strategy == UpdateStrategy::FlexVer {
|
||||
let mut sorted: Vec<_> = compatible_files.iter().collect();
|
||||
sorted.sort_by(|a, b| FlexVer(&b.file_name).cmp(&FlexVer(&a.file_name)));
|
||||
*sorted.first().unwrap()
|
||||
} else {
|
||||
// Prefer release over beta over alpha, then by date published
|
||||
compatible_files
|
||||
.iter()
|
||||
.max_by_key(|f| {
|
||||
let type_priority = match f.release_type {
|
||||
crate::model::ReleaseType::Release => 3,
|
||||
crate::model::ReleaseType::Beta => 2,
|
||||
crate::model::ReleaseType::Alpha => 1,
|
||||
};
|
||||
(type_priority, &f.date_published)
|
||||
})
|
||||
.unwrap()
|
||||
};
|
||||
|
||||
Ok(best)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue