mirror of
https://github.com/astral-sh/uv.git
synced 2025-11-19 19:44:40 +00:00
Avoid showing dev hints for Python requirements (#4111)
Closes https://github.com/astral-sh/uv/issues/4096.
This commit is contained in:
parent
e4e2590076
commit
677a7f157b
1 changed files with 44 additions and 52 deletions
|
|
@ -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) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue