mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-04-08 04:40:56 +01:00
feat: switch to version_matches for semver comparison
Fixes `*` not resolving to versions which are pre-releases.
This commit is contained in:
parent
6ae7e5078c
commit
805a257a76
7 changed files with 13 additions and 11 deletions
|
@ -342,7 +342,7 @@ pub async fn install(
|
|||
crate::cli::version::get_installed_versions(engine)
|
||||
.await?
|
||||
.into_iter()
|
||||
.filter(|version| version_matches(version, &req))
|
||||
.filter(|version| version_matches(&req, version))
|
||||
.next_back()
|
||||
.map(|version| (engine, version)),
|
||||
)
|
||||
|
@ -418,7 +418,7 @@ pub async fn install(
|
|||
continue;
|
||||
};
|
||||
|
||||
if !version_matches(version, &req) {
|
||||
if !version_matches(&req, version) {
|
||||
multi.suspend(|| {
|
||||
println!("{}: package {id} requires {engine} {req}, but {version} is installed", "warn".yellow().bold());
|
||||
});
|
||||
|
|
|
@ -184,7 +184,7 @@ pub async fn get_or_download_engine(
|
|||
|
||||
let max_matching = installed_versions
|
||||
.iter()
|
||||
.filter(|v| version_matches(v, &req))
|
||||
.filter(|v| version_matches(&req, v))
|
||||
.next_back();
|
||||
if let Some(version) = max_matching {
|
||||
return Ok(path
|
||||
|
|
|
@ -60,7 +60,7 @@ impl EngineSource for GitHubEngineSource {
|
|||
.into_iter()
|
||||
.filter_map(
|
||||
|release| match release.tag_name.trim_start_matches('v').parse() {
|
||||
Ok(version) if version_matches(&version, requirement) => {
|
||||
Ok(version) if version_matches(requirement, &version) => {
|
||||
Some((version, release))
|
||||
}
|
||||
_ => None,
|
||||
|
|
|
@ -430,7 +430,7 @@ pub async fn find_roots(
|
|||
|
||||
/// Returns whether a version matches a version requirement
|
||||
/// Differs from `VersionReq::matches` in that EVERY version matches `*`
|
||||
pub fn version_matches(version: &Version, req: &VersionReq) -> bool {
|
||||
pub fn version_matches(req: &VersionReq, version: &Version) -> bool {
|
||||
*req == VersionReq::STAR || req.matches(version)
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ use anyhow::Context;
|
|||
use clap::{builder::styling::AnsiColor, Parser};
|
||||
use fs_err::tokio as fs;
|
||||
use indicatif::MultiProgress;
|
||||
use pesde::{engine::EngineKind, find_roots, AuthConfig, Project};
|
||||
use pesde::{engine::EngineKind, find_roots, version_matches, AuthConfig, Project};
|
||||
use semver::VersionReq;
|
||||
use std::{
|
||||
io,
|
||||
|
@ -297,7 +297,7 @@ async fn run() -> anyhow::Result<()> {
|
|||
if engine == EngineKind::Pesde {
|
||||
match &req {
|
||||
// we're already running a compatible version
|
||||
Some(req) if req.matches(¤t_version()) => break 'engines,
|
||||
Some(req) if version_matches(req, ¤t_version()) => break 'engines,
|
||||
// the user has not requested a specific version, so we'll just use the current one
|
||||
None => break 'engines,
|
||||
_ => (),
|
||||
|
|
|
@ -24,7 +24,7 @@ use crate::{
|
|||
DependencySpecifiers, PackageSource, ResolveResult, VersionId, IGNORED_DIRS, IGNORED_FILES,
|
||||
},
|
||||
util::hash,
|
||||
Project,
|
||||
version_matches, Project,
|
||||
};
|
||||
use fs_err::tokio as fs;
|
||||
use futures::StreamExt;
|
||||
|
@ -163,7 +163,7 @@ impl PackageSource for PesdePackageSource {
|
|||
.into_iter()
|
||||
.filter(|(_, entry)| !entry.yanked)
|
||||
.filter(|(VersionId(version, target), _)| {
|
||||
specifier.version.matches(version)
|
||||
version_matches(&specifier.version, version)
|
||||
&& specifier.target.unwrap_or(*project_target) == *target
|
||||
})
|
||||
.map(|(id, entry)| {
|
||||
|
|
|
@ -17,7 +17,7 @@ use crate::{
|
|||
PackageSources, ResolveResult, IGNORED_DIRS, IGNORED_FILES,
|
||||
},
|
||||
util::hash,
|
||||
Project,
|
||||
version_matches, Project,
|
||||
};
|
||||
use fs_err::tokio as fs;
|
||||
use gix::Url;
|
||||
|
@ -182,7 +182,9 @@ impl PackageSource for WallyPackageSource {
|
|||
PackageNames::Wally(specifier.name.clone()),
|
||||
entries
|
||||
.into_iter()
|
||||
.filter(|manifest| specifier.version.matches(&manifest.package.version))
|
||||
.filter(|manifest| {
|
||||
version_matches(&specifier.version, &manifest.package.version)
|
||||
})
|
||||
.map(|manifest| {
|
||||
let dependencies = manifest.all_dependencies().map_err(|e| {
|
||||
errors::ResolveError::AllDependencies(specifier.to_string(), e)
|
||||
|
|
Loading…
Add table
Reference in a new issue