diff --git a/crates/puffin-resolver/src/resolver.rs b/crates/puffin-resolver/src/resolver.rs index 8de0d46a4..b81216c00 100644 --- a/crates/puffin-resolver/src/resolver.rs +++ b/crates/puffin-resolver/src/resolver.rs @@ -531,10 +531,21 @@ impl<'a, Context: BuildContext> Resolver<'a, Context> { if let Ok(name) = WheelFilename::from_str(file.filename.as_str()) { if name.is_compatible(self.tags) { let version = PubGrubVersion::from(name.version); - if let std::collections::btree_map::Entry::Vacant(entry) = - version_map.entry(version) - { - entry.insert(DistributionFile::from(WheelFile::from(file))); + + match version_map.entry(version) { + std::collections::btree_map::Entry::Occupied(mut entry) => { + if let DistributionFile::Sdist(_) = entry.get() { + // Wheels get precedence over source distributions + entry.insert(DistributionFile::from( + WheelFile::from(file), + )); + } + } + std::collections::btree_map::Entry::Vacant(entry) => { + entry.insert(DistributionFile::from(WheelFile::from( + file, + ))); + } } } } else if let Ok(name) = SourceDistributionFilename::parse( diff --git a/crates/puffin-resolver/src/selector.rs b/crates/puffin-resolver/src/selector.rs index cde952332..30a3caff0 100644 --- a/crates/puffin-resolver/src/selector.rs +++ b/crates/puffin-resolver/src/selector.rs @@ -153,13 +153,16 @@ impl CandidateSelector { file: file.clone(), }); } - DistributionFile::Sdist(_) => { + DistributionFile::Sdist(_) if sdist.is_none() => { sdist = Some(Candidate { package_name: package_name.clone(), version: version.clone(), file: file.clone(), }); } + DistributionFile::Sdist(_) => { + // We already selected a more recent source distribution + } } } } diff --git a/scripts/benchmarks/requirements/mst.in b/scripts/benchmarks/requirements/mst.in new file mode 100644 index 000000000..b3ee1de8b --- /dev/null +++ b/scripts/benchmarks/requirements/mst.in @@ -0,0 +1 @@ +meine_stadt_transparent \ No newline at end of file