fetch: use flexver for file selection

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ia01283a5665ac9497858821f13a7751d6a6a6964
This commit is contained in:
raf 2026-04-18 21:29:16 +03:00
commit af3cdbf343
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -11,8 +11,8 @@ use tokio::sync::Semaphore;
use crate::{ use crate::{
error::{PakkerError, Result}, error::{PakkerError, Result},
model::{Config, LockFile, Project, ProjectFile}, model::{Config, LockFile, Project, ProjectFile, UpdateStrategy},
utils::verify_hash, utils::{FlexVer, verify_hash},
}; };
/// Maximum number of concurrent downloads /// Maximum number of concurrent downloads
@ -326,8 +326,14 @@ impl Fetcher {
))); )));
} }
// Prefer release over beta over alpha // Select best file based on update strategy
let best = compatible_files 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() .iter()
.max_by_key(|f| { .max_by_key(|f| {
let type_priority = match f.release_type { let type_priority = match f.release_type {
@ -337,7 +343,8 @@ impl Fetcher {
}; };
(type_priority, &f.date_published) (type_priority, &f.date_published)
}) })
.unwrap(); .unwrap()
};
Ok(best) Ok(best)
} }