mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-03 07:14:35 +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())
|
range.intersection(&specifier.into())
|
||||||
})?
|
})?
|
||||||
} else {
|
} else {
|
||||||
specifier
|
PubGrubSpecifier::try_from(specifier)?.into()
|
||||||
.iter()
|
|
||||||
.map(PubGrubSpecifier::try_from)
|
|
||||||
.fold_ok(Range::full(), |range, specifier| {
|
|
||||||
range.intersection(&specifier.into())
|
|
||||||
})?
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
use itertools::Itertools;
|
||||||
use pubgrub::range::Range;
|
use pubgrub::range::Range;
|
||||||
|
|
||||||
use pep440_rs::{Operator, PreRelease, Version, VersionSpecifier};
|
use pep440_rs::{Operator, PreRelease, Version, VersionSpecifier, VersionSpecifiers};
|
||||||
|
|
||||||
use crate::ResolveError;
|
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 {
|
impl TryFrom<&VersionSpecifier> for PubGrubSpecifier {
|
||||||
type Error = ResolveError;
|
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> {
|
fn try_from(specifier: &VersionSpecifier) -> Result<Self, ResolveError> {
|
||||||
let ranges = match specifier.operator() {
|
let ranges = match specifier.operator() {
|
||||||
Operator::Equal => {
|
Operator::Equal => {
|
||||||
|
|
|
@ -7,7 +7,6 @@ use std::thread;
|
||||||
|
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use futures::{FutureExt, StreamExt, TryFutureExt};
|
use futures::{FutureExt, StreamExt, TryFutureExt};
|
||||||
use itertools::Itertools;
|
|
||||||
use pubgrub::error::PubGrubError;
|
use pubgrub::error::PubGrubError;
|
||||||
use pubgrub::range::Range;
|
use pubgrub::range::Range;
|
||||||
use pubgrub::solver::{Incompatibility, State};
|
use pubgrub::solver::{Incompatibility, State};
|
||||||
|
@ -412,12 +411,8 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
)),
|
)),
|
||||||
) = reason
|
) = reason
|
||||||
{
|
{
|
||||||
let python_version = requires_python
|
let python_version: Range<Version> =
|
||||||
.iter()
|
PubGrubSpecifier::try_from(&requires_python)?.into();
|
||||||
.map(PubGrubSpecifier::try_from)
|
|
||||||
.fold_ok(Range::full(), |range, specifier| {
|
|
||||||
range.intersection(&specifier.into())
|
|
||||||
})?;
|
|
||||||
|
|
||||||
let package = &state.next;
|
let package = &state.next;
|
||||||
state
|
state
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue