Revert refactor: Put find_version back to drivers

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2022-06-18 18:25:50 +10:00
parent a5879e3d65
commit b14b71135e
No known key found for this signature in database
GPG key ID: 591C0B03040416D6
2 changed files with 46 additions and 51 deletions

View file

@ -1,17 +1,60 @@
use std::collections::BTreeSet;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use log::debug;
use semver::{Version, VersionReq};
use crate::BinstallError; use crate::BinstallError;
mod cratesio; mod cratesio;
pub use cratesio::*; pub use cratesio::*;
mod version;
use version::find_version;
mod vfs; mod vfs;
mod visitor; mod visitor;
fn find_version<'a, V: Iterator<Item = &'a String>>(
requirement: &str,
version_iter: V,
) -> Result<Version, BinstallError> {
// Parse version requirement
let version_req = VersionReq::parse(requirement).map_err(|err| BinstallError::VersionReq {
req: requirement.into(),
err,
})?;
// Filter for matching versions
let filtered: BTreeSet<_> = version_iter
.filter_map(|v| {
// Remove leading `v` for git tags
let ver_str = match v.strip_prefix('s') {
Some(v) => v,
None => v,
};
// Parse out version
let ver = Version::parse(ver_str).ok()?;
debug!("Version: {:?}", ver);
// Filter by version match
if version_req.matches(&ver) {
Some(ver)
} else {
None
}
})
.collect();
debug!("Filtered: {:?}", filtered);
// Return highest version
filtered
.iter()
.max()
.cloned()
.ok_or(BinstallError::VersionMismatch { req: version_req })
}
/// Fetch a crate by name and version from github /// Fetch a crate by name and version from github
/// TODO: implement this /// TODO: implement this
pub async fn fetch_crate_gh_releases( pub async fn fetch_crate_gh_releases(

View file

@ -1,48 +0,0 @@
use std::collections::BTreeSet;
use log::debug;
use semver::{Version, VersionReq};
use crate::BinstallError;
pub(super) fn find_version<'a, V: Iterator<Item = &'a String>>(
requirement: &str,
version_iter: V,
) -> Result<Version, BinstallError> {
// Parse version requirement
let version_req = VersionReq::parse(requirement).map_err(|err| BinstallError::VersionReq {
req: requirement.into(),
err,
})?;
// Filter for matching versions
let filtered: BTreeSet<_> = version_iter
.filter_map(|v| {
// Remove leading `v` for git tags
let ver_str = match v.strip_prefix('s') {
Some(v) => v,
None => v,
};
// Parse out version
let ver = Version::parse(ver_str).ok()?;
debug!("Version: {:?}", ver);
// Filter by version match
if version_req.matches(&ver) {
Some(ver)
} else {
None
}
})
.collect();
debug!("Filtered: {:?}", filtered);
// Return highest version
filtered
.iter()
.max()
.cloned()
.ok_or(BinstallError::VersionMismatch { req: version_req })
}