mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 21:35:00 +00:00
impl TryFrom<&VersionSpecifiers> for PubGrubSpecifier
(#4010)
Add a missing utility conversion method from PEP 440 versions specifiers to a pubgrub range.
This commit is contained in:
parent
40e0dddd00
commit
36f7fa3917
3 changed files with 21 additions and 15 deletions
|
@ -228,12 +228,7 @@ impl PubGrubRequirement {
|
|||
range.intersection(&specifier.into())
|
||||
})?
|
||||
} else {
|
||||
specifier
|
||||
.iter()
|
||||
.map(PubGrubSpecifier::try_from)
|
||||
.fold_ok(Range::full(), |range, specifier| {
|
||||
range.intersection(&specifier.into())
|
||||
})?
|
||||
PubGrubSpecifier::try_from(specifier)?.into()
|
||||
};
|
||||
|
||||
Ok(Self {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use itertools::Itertools;
|
||||
use pubgrub::range::Range;
|
||||
|
||||
use pep440_rs::{Operator, PreRelease, Version, VersionSpecifier};
|
||||
use pep440_rs::{Operator, PreRelease, Version, VersionSpecifier, VersionSpecifiers};
|
||||
|
||||
use crate::ResolveError;
|
||||
|
||||
|
@ -15,10 +16,25 @@ impl From<PubGrubSpecifier> for Range<Version> {
|
|||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&VersionSpecifiers> for PubGrubSpecifier {
|
||||
type Error = ResolveError;
|
||||
|
||||
/// Convert a PEP 440 specifier to a PubGrub-compatible version range.
|
||||
fn try_from(specifiers: &VersionSpecifiers) -> Result<Self, ResolveError> {
|
||||
let range = specifiers
|
||||
.iter()
|
||||
.map(crate::pubgrub::PubGrubSpecifier::try_from)
|
||||
.fold_ok(Range::full(), |range, specifier| {
|
||||
range.intersection(&specifier.into())
|
||||
})?;
|
||||
Ok(Self(range))
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&VersionSpecifier> for PubGrubSpecifier {
|
||||
type Error = ResolveError;
|
||||
|
||||
/// Convert a PEP 508 specifier to a PubGrub-compatible version range.
|
||||
/// Convert a PEP 440 specifier to a PubGrub-compatible version range.
|
||||
fn try_from(specifier: &VersionSpecifier) -> Result<Self, ResolveError> {
|
||||
let ranges = match specifier.operator() {
|
||||
Operator::Equal => {
|
||||
|
|
|
@ -7,7 +7,6 @@ use std::thread;
|
|||
|
||||
use dashmap::DashMap;
|
||||
use futures::{FutureExt, StreamExt, TryFutureExt};
|
||||
use itertools::Itertools;
|
||||
use pubgrub::error::PubGrubError;
|
||||
use pubgrub::range::Range;
|
||||
use pubgrub::solver::{Incompatibility, State};
|
||||
|
@ -412,12 +411,8 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
|||
)),
|
||||
) = reason
|
||||
{
|
||||
let python_version = requires_python
|
||||
.iter()
|
||||
.map(PubGrubSpecifier::try_from)
|
||||
.fold_ok(Range::full(), |range, specifier| {
|
||||
range.intersection(&specifier.into())
|
||||
})?;
|
||||
let python_version: Range<Version> =
|
||||
PubGrubSpecifier::try_from(&requires_python)?.into();
|
||||
|
||||
let package = &state.next;
|
||||
state
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue