Update pubgrub to `Ranges::from_iter` (#9145)

Co-authored-by: Zanie Blue <contact@zanie.dev>
This commit is contained in:
konsti 2024-11-18 13:28:17 +01:00 committed by GitHub
parent 587c9b02a6
commit a07d5a1d18
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 31 deletions

8
Cargo.lock generated
View File

@ -2674,13 +2674,13 @@ dependencies = [
[[package]] [[package]]
name = "pubgrub" name = "pubgrub"
version = "0.2.1" version = "0.2.1"
source = "git+https://github.com/astral-sh/pubgrub?rev=95e1390399cdddee986b658be19587eb1fdb2d79#95e1390399cdddee986b658be19587eb1fdb2d79" source = "git+https://github.com/astral-sh/pubgrub?rev=57afc831bf2551f164617a10383cf288bf5d190d#57afc831bf2551f164617a10383cf288bf5d190d"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"log", "log",
"priority-queue", "priority-queue",
"rustc-hash", "rustc-hash",
"thiserror 1.0.67", "thiserror 2.0.3",
"version-ranges", "version-ranges",
] ]
@ -5661,8 +5661,8 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]] [[package]]
name = "version-ranges" name = "version-ranges"
version = "0.1.0" version = "0.1.1"
source = "git+https://github.com/astral-sh/pubgrub?rev=95e1390399cdddee986b658be19587eb1fdb2d79#95e1390399cdddee986b658be19587eb1fdb2d79" source = "git+https://github.com/astral-sh/pubgrub?rev=57afc831bf2551f164617a10383cf288bf5d190d#57afc831bf2551f164617a10383cf288bf5d190d"
dependencies = [ dependencies = [
"smallvec", "smallvec",
] ]

View File

@ -130,7 +130,7 @@ petgraph = { version = "0.6.5" }
platform-info = { version = "2.0.3" } platform-info = { version = "2.0.3" }
proc-macro2 = { version = "1.0.86" } proc-macro2 = { version = "1.0.86" }
procfs = { version = "0.17.0", default-features = false, features = ["flate2"] } procfs = { version = "0.17.0", default-features = false, features = ["flate2"] }
pubgrub = { git = "https://github.com/astral-sh/pubgrub", rev = "95e1390399cdddee986b658be19587eb1fdb2d79" } pubgrub = { git = "https://github.com/astral-sh/pubgrub", rev = "57afc831bf2551f164617a10383cf288bf5d190d" }
quote = { version = "1.0.37" } quote = { version = "1.0.37" }
rayon = { version = "1.10.0" } rayon = { version = "1.10.0" }
reflink-copy = { version = "0.1.19" } reflink-copy = { version = "0.1.19" }
@ -175,7 +175,7 @@ unicode-width = { version = "0.1.13" }
unscanny = { version = "0.1.0" } unscanny = { version = "0.1.0" }
url = { version = "2.5.2" } url = { version = "2.5.2" }
urlencoding = { version = "2.1.3" } urlencoding = { version = "2.1.3" }
version-ranges = { git = "https://github.com/astral-sh/pubgrub", rev = "95e1390399cdddee986b658be19587eb1fdb2d79" } version-ranges = { git = "https://github.com/astral-sh/pubgrub", rev = "57afc831bf2551f164617a10383cf288bf5d190d" }
walkdir = { version = "2.5.0" } walkdir = { version = "2.5.0" }
which = { version = "7.0.0", features = ["regex"] } which = { version = "7.0.0", features = ["regex"] }
windows-registry = { version = "0.3.0" } windows-registry = { version = "0.3.0" }

View File

@ -50,7 +50,7 @@ use std::ops::Bound;
use std::sync::Mutex; use std::sync::Mutex;
use std::sync::MutexGuard; use std::sync::MutexGuard;
use itertools::Either; use itertools::{Either, Itertools};
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use std::sync::LazyLock; use std::sync::LazyLock;
use uv_pep440::{release_specifier_to_range, Operator, Version, VersionSpecifier}; use uv_pep440::{release_specifier_to_range, Operator, Version, VersionSpecifier};
@ -753,16 +753,15 @@ impl Edges {
/// ///
/// Only for use when the `key` is a `PythonVersion`. Normalizes to `PythonFullVersion`. /// Only for use when the `key` is a `PythonVersion`. Normalizes to `PythonFullVersion`.
fn from_python_versions(versions: Vec<Version>, negated: bool) -> Result<Edges, NodeId> { fn from_python_versions(versions: Vec<Version>, negated: bool) -> Result<Edges, NodeId> {
let mut range = Ranges::empty(); let mut range: Ranges<Version> = versions
.into_iter()
// TODO(zanieb): We need to make sure this is performant, repeated unions like this do not .map(|version| {
// seem efficient.
for version in versions {
let specifier = VersionSpecifier::equals_version(version.clone()); let specifier = VersionSpecifier::equals_version(version.clone());
let specifier = python_version_to_full_version(specifier)?; let specifier = python_version_to_full_version(specifier)?;
let pubgrub_specifier = release_specifier_to_range(normalize_specifier(specifier)); Ok(release_specifier_to_range(normalize_specifier(specifier)))
range = range.union(&pubgrub_specifier); })
} .flatten_ok()
.collect::<Result<Ranges<_>, NodeId>>()?;
if negated { if negated {
range = range.complement(); range = range.complement();
@ -774,14 +773,16 @@ impl Edges {
} }
/// Returns an [`Edges`] where values in the given range are `true`. /// Returns an [`Edges`] where values in the given range are `true`.
fn from_versions(versions: &Vec<Version>, negated: bool) -> Edges { fn from_versions(versions: &[Version], negated: bool) -> Edges {
let mut range = Ranges::empty(); let mut range: Ranges<Version> = versions
.iter()
// TODO(zanieb): We need to make sure this is performant, repeated unions like this do not .map(|version| {
// seem efficient. (
for version in versions { Bound::Included(version.clone()),
range = range.union(&Ranges::singleton(version.clone())); Bound::Included(version.clone()),
} )
})
.collect();
if negated { if negated {
range = range.complement(); range = range.complement();

View File

@ -827,12 +827,10 @@ impl<'range> SentinelRange<'range> {
/// Remove local versions sentinels (`+[max]`) from the version ranges. /// Remove local versions sentinels (`+[max]`) from the version ranges.
pub fn strip(&self) -> Ranges<Version> { pub fn strip(&self) -> Ranges<Version> {
let mut range = Ranges::empty(); self.0
for (lower, upper) in self.0.iter() { .iter()
let (lower, upper) = Self::strip_sentinel(lower.clone(), upper.clone()); .map(|(lower, upper)| Self::strip_sentinel(lower.clone(), upper.clone()))
range = range.union(&Range::from_range_bounds((lower, upper))); .collect()
}
range
} }
/// Remove local versions sentinels (`+[max]`) from the interval. /// Remove local versions sentinels (`+[max]`) from the interval.