Avoid showing dev hints for Python requirements (#4111)

Closes https://github.com/astral-sh/uv/issues/4096.
This commit is contained in:
Charlie Marsh 2024-06-06 15:58:30 -04:00 committed by GitHub
parent e4e2590076
commit 677a7f157b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -407,67 +407,59 @@ impl PubGrubReportFormatter<'_> {
unavailable_packages: &FxHashMap<PackageName, UnavailablePackage>, unavailable_packages: &FxHashMap<PackageName, UnavailablePackage>,
incomplete_packages: &FxHashMap<PackageName, BTreeMap<Version, IncompletePackage>>, incomplete_packages: &FxHashMap<PackageName, BTreeMap<Version, IncompletePackage>>,
) -> IndexSet<PubGrubHint> { ) -> IndexSet<PubGrubHint> {
/// Returns `true` if pre-releases were allowed for a package.
fn allowed_prerelease(package: &PubGrubPackage, selector: &CandidateSelector) -> bool {
let PubGrubPackageInner::Package { name, .. } = &**package else {
return false;
};
selector.prerelease_strategy().allows(name)
}
let mut hints = IndexSet::default(); let mut hints = IndexSet::default();
match derivation_tree { match derivation_tree {
DerivationTree::External(external) => match external { DerivationTree::External(external) => match external {
External::Custom(package, set, _) | External::NoVersions(package, set) => { External::Custom(package, set, _) | External::NoVersions(package, set) => {
// Check for no versions due to pre-release options if let PubGrubPackageInner::Package { name, .. } = &**package {
if let Some(selector) = selector { // Check for no versions due to pre-release options
let any_prerelease = set.iter().any(|(start, end)| { if let Some(selector) = selector {
let is_pre1 = match start { let any_prerelease = set.iter().any(|(start, end)| {
Bound::Included(version) => version.any_prerelease(), let is_pre1 = match start {
Bound::Excluded(version) => version.any_prerelease(), Bound::Included(version) => version.any_prerelease(),
Bound::Unbounded => false, Bound::Excluded(version) => version.any_prerelease(),
}; Bound::Unbounded => false,
let is_pre2 = match end { };
Bound::Included(version) => version.any_prerelease(), let is_pre2 = match end {
Bound::Excluded(version) => version.any_prerelease(), Bound::Included(version) => version.any_prerelease(),
Bound::Unbounded => false, Bound::Excluded(version) => version.any_prerelease(),
}; Bound::Unbounded => false,
is_pre1 || is_pre2 };
}); is_pre1 || is_pre2
});
if any_prerelease { if any_prerelease {
// A pre-release marker appeared in the version requirements. // A pre-release marker appeared in the version requirements.
if !allowed_prerelease(package, selector) { if !selector.prerelease_strategy().allows(name) {
hints.insert(PubGrubHint::PreReleaseRequested { hints.insert(PubGrubHint::PreReleaseRequested {
package: package.clone(), package: package.clone(),
range: self.simplify_set(set, package).into_owned(), range: self.simplify_set(set, package).into_owned(),
}); });
} }
} else if let Some(version) = } else if let Some(version) =
self.available_versions.get(package).and_then(|versions| { self.available_versions.get(package).and_then(|versions| {
versions versions
.iter() .iter()
.rev() .rev()
.filter(|version| version.any_prerelease()) .filter(|version| version.any_prerelease())
.find(|version| set.contains(version)) .find(|version| set.contains(version))
}) })
{ {
// There are pre-release versions available for the package. // There are pre-release versions available for the package.
if !allowed_prerelease(package, selector) { if !selector.prerelease_strategy().allows(name) {
hints.insert(PubGrubHint::PreReleaseAvailable { hints.insert(PubGrubHint::PreReleaseAvailable {
package: package.clone(), package: package.clone(),
version: version.clone(), version: version.clone(),
}); });
}
} }
} }
}
// Check for no versions due to no `--find-links` flat index // Check for no versions due to no `--find-links` flat index
if let Some(index_locations) = index_locations { if let Some(index_locations) = index_locations {
let no_find_links = let no_find_links =
index_locations.flat_index().peekable().peek().is_none(); index_locations.flat_index().peekable().peek().is_none();
if let PubGrubPackageInner::Package { name, .. } = &**package {
// Add hints due to the package being entirely unavailable. // Add hints due to the package being entirely unavailable.
match unavailable_packages.get(name) { match unavailable_packages.get(name) {
Some(UnavailablePackage::NoIndex) => { Some(UnavailablePackage::NoIndex) => {