Consider editable dependencies to be 'direct' (#2114)

Closes https://github.com/astral-sh/uv/issues/2112.
This commit is contained in:
Charlie Marsh 2024-03-01 11:00:45 -05:00 committed by GitHub
parent c9ffe976f9
commit 72dc72496f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 82 additions and 28 deletions

View file

@ -1,8 +1,10 @@
use rustc_hash::FxHashSet;
use pep508_rs::{Requirement, VersionOrUrl};
use pep508_rs::VersionOrUrl;
use uv_normalize::PackageName;
use crate::Manifest;
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
pub enum PreReleaseMode {
@ -48,21 +50,23 @@ pub(crate) enum PreReleaseStrategy {
}
impl PreReleaseStrategy {
pub(crate) fn from_mode(
mode: PreReleaseMode,
requirements: &[Requirement],
constraints: &[Requirement],
overrides: &[Requirement],
) -> Self {
pub(crate) fn from_mode(mode: PreReleaseMode, manifest: &Manifest) -> Self {
match mode {
PreReleaseMode::Disallow => Self::Disallow,
PreReleaseMode::Allow => Self::Allow,
PreReleaseMode::IfNecessary => Self::IfNecessary,
PreReleaseMode::Explicit => Self::Explicit(
requirements
manifest
.requirements
.iter()
.chain(constraints.iter())
.chain(overrides.iter())
.chain(manifest.constraints.iter())
.chain(manifest.overrides.iter())
.chain(
manifest
.editables
.iter()
.flat_map(|(_editable, metadata)| metadata.requires_dist.iter()),
)
.filter(|requirement| {
let Some(version_or_url) = &requirement.version_or_url else {
return false;
@ -81,10 +85,17 @@ impl PreReleaseStrategy {
.collect(),
),
PreReleaseMode::IfNecessaryOrExplicit => Self::IfNecessaryOrExplicit(
requirements
manifest
.requirements
.iter()
.chain(constraints.iter())
.chain(overrides.iter())
.chain(manifest.constraints.iter())
.chain(manifest.overrides.iter())
.chain(
manifest
.editables
.iter()
.flat_map(|(_editable, metadata)| metadata.requires_dist.iter()),
)
.filter(|requirement| {
let Some(version_or_url) = &requirement.version_or_url else {
return false;