Allow pre-releases for requirements in constraints files (#2069)

## Summary

If a pre-release marker is present on a requirement in a constraint
file, we should allow pre-releases for that package.

Closes https://github.com/astral-sh/uv/issues/2063.
This commit is contained in:
Charlie Marsh 2024-02-28 20:16:23 -05:00 committed by GitHub
parent 69fb9c37fb
commit 1bc5485094
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 55 additions and 3 deletions

View file

@ -48,14 +48,21 @@ pub(crate) enum PreReleaseStrategy {
}
impl PreReleaseStrategy {
pub(crate) fn from_mode(mode: PreReleaseMode, direct_dependencies: &[Requirement]) -> Self {
pub(crate) fn from_mode(
mode: PreReleaseMode,
requirements: &[Requirement],
constraints: &[Requirement],
overrides: &[Requirement],
) -> Self {
match mode {
PreReleaseMode::Disallow => Self::Disallow,
PreReleaseMode::Allow => Self::Allow,
PreReleaseMode::IfNecessary => Self::IfNecessary,
PreReleaseMode::Explicit => Self::Explicit(
direct_dependencies
requirements
.iter()
.chain(constraints.iter())
.chain(overrides.iter())
.filter(|requirement| {
let Some(version_or_url) = &requirement.version_or_url else {
return false;
@ -74,8 +81,10 @@ impl PreReleaseStrategy {
.collect(),
),
PreReleaseMode::IfNecessaryOrExplicit => Self::IfNecessaryOrExplicit(
direct_dependencies
requirements
.iter()
.chain(constraints.iter())
.chain(overrides.iter())
.filter(|requirement| {
let Some(version_or_url) = &requirement.version_or_url else {
return false;