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