diff --git a/crates/puffin-resolver/src/resolution.rs b/crates/puffin-resolver/src/resolution.rs index 828d60893..813f9ba2d 100644 --- a/crates/puffin-resolver/src/resolution.rs +++ b/crates/puffin-resolver/src/resolution.rs @@ -1,6 +1,7 @@ use std::hash::BuildHasherDefault; use anyhow::Result; +use dashmap::DashMap; use owo_colors::OwoColorize; use petgraph::visit::EdgeRef; use petgraph::Direction; @@ -43,7 +44,7 @@ impl ResolutionGraph { pins: &FilePins, packages: &OnceMap, distributions: &OnceMap, - redirects: &OnceMap, + redirects: &DashMap, state: &State, PubGrubPriority>, editables: FxHashMap, ) -> Result { diff --git a/crates/puffin-resolver/src/resolver/index.rs b/crates/puffin-resolver/src/resolver/index.rs index 6976f6c99..20973752e 100644 --- a/crates/puffin-resolver/src/resolver/index.rs +++ b/crates/puffin-resolver/src/resolver/index.rs @@ -1,3 +1,4 @@ +use dashmap::DashMap; use url::Url; use distribution_types::PackageId; @@ -17,8 +18,10 @@ pub(crate) struct Index { /// A map from package ID to metadata for that distribution. pub(crate) distributions: OnceMap, - /// A map from source URL to precise URL. - pub(crate) redirects: OnceMap, + /// A map from source URL to precise URL. For example, the source URL + /// `git+https://github.com/pallets/flask.git` could be redirected to + /// `git+https://github.com/pallets/flask.git@c2f65dd1cfff0672b902fd5b30815f0b4137214c`. + pub(crate) redirects: DashMap, } impl Index { @@ -28,6 +31,5 @@ impl Index { pub(crate) fn cancel_all(&self) { self.packages.cancel_all(); self.distributions.cancel_all(); - self.redirects.cancel_all(); } } diff --git a/crates/puffin-resolver/src/resolver/mod.rs b/crates/puffin-resolver/src/resolver/mod.rs index b59d2ca9f..d60756bbc 100644 --- a/crates/puffin-resolver/src/resolver/mod.rs +++ b/crates/puffin-resolver/src/resolver/mod.rs @@ -66,6 +66,7 @@ pub struct Resolver<'a, Provider: ResolverProvider> { python_requirement: PythonRequirement<'a>, selector: CandidateSelector, index: Arc, + /// A map from [`PackageId`] to the `Requires-Python` version specifiers for that package. incompatibilities: DashMap, editables: FxHashMap, reporter: Option>, @@ -703,13 +704,13 @@ impl<'a, Provider: ResolverProvider> Resolver<'a, Provider> { if let Some(precise) = precise { match distribution { SourceDist::DirectUrl(sdist) => { - self.index.redirects.done(sdist.url.to_url(), precise); + self.index.redirects.insert(sdist.url.to_url(), precise); } SourceDist::Git(sdist) => { - self.index.redirects.done(sdist.url.to_url(), precise); + self.index.redirects.insert(sdist.url.to_url(), precise); } SourceDist::Path(sdist) => { - self.index.redirects.done(sdist.url.to_url(), precise); + self.index.redirects.insert(sdist.url.to_url(), precise); } SourceDist::Registry(_) => {} }