Skip to content

Commit

Permalink
Avoid showing lower-bound warning outside of explicit lock and sync
Browse files Browse the repository at this point in the history
  • Loading branch information
charliermarsh committed Oct 16, 2024
1 parent 2153c6a commit df7a681
Show file tree
Hide file tree
Showing 25 changed files with 117 additions and 55 deletions.
4 changes: 3 additions & 1 deletion crates/uv-bench/benches/uv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ mod resolver {
use uv_cache::Cache;
use uv_client::RegistryClient;
use uv_configuration::{
BuildOptions, Concurrency, ConfigSettings, Constraints, IndexStrategy, SourceStrategy,
BuildOptions, Concurrency, ConfigSettings, Constraints, IndexStrategy, LowerBound,
SourceStrategy,
};
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
Expand Down Expand Up @@ -191,6 +192,7 @@ mod resolver {
&build_options,
&hashes,
exclude_newer,
LowerBound::default(),
sources,
concurrency,
);
Expand Down
7 changes: 4 additions & 3 deletions crates/uv-build-frontend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,8 @@ use tokio::process::Command;
use tokio::sync::{Mutex, Semaphore};
use tracing::{debug, info_span, instrument, Instrument};

pub use crate::error::{Error, MissingHeaderCause};
use uv_configuration::{BuildKind, BuildOutput, ConfigSettings, SourceStrategy};
use uv_distribution::{LowerBound, RequiresDist};
use uv_configuration::{BuildKind, BuildOutput, ConfigSettings, LowerBound, SourceStrategy};
use uv_distribution::RequiresDist;
use uv_distribution_types::{IndexLocations, Resolution};
use uv_fs::{rename_with_retry, PythonExt, Simplified};
use uv_pep440::Version;
Expand All @@ -39,6 +38,8 @@ use uv_python::{Interpreter, PythonEnvironment};
use uv_static::EnvVars;
use uv_types::{BuildContext, BuildIsolation, SourceBuildTrait};

pub use crate::error::{Error, MissingHeaderCause};

/// The default backend to use when PEP 517 is used without a `build-system` section.
static DEFAULT_BACKEND: LazyLock<Pep517Backend> = LazyLock::new(|| Pep517Backend {
backend: "setuptools.build_meta:__legacy__".to_string(),
Expand Down
8 changes: 8 additions & 0 deletions crates/uv-configuration/src/bounds.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#[derive(Debug, Default, Copy, Clone)]
pub enum LowerBound {
/// Allow missing lower bounds.
#[default]
Allow,
/// Warn about missing lower bounds.
Warn,
}
2 changes: 2 additions & 0 deletions crates/uv-configuration/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
pub use authentication::*;
pub use bounds::*;
pub use build_options::*;
pub use concurrency::*;
pub use config_settings::*;
Expand All @@ -20,6 +21,7 @@ pub use trusted_publishing::*;
pub use vcs::*;

mod authentication;
mod bounds;
mod build_options;
mod concurrency;
mod config_settings;
Expand Down
10 changes: 9 additions & 1 deletion crates/uv-dispatch/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ use uv_build_frontend::{SourceBuild, SourceBuildContext};
use uv_cache::Cache;
use uv_client::RegistryClient;
use uv_configuration::{
BuildKind, BuildOptions, ConfigSettings, Constraints, IndexStrategy, Reinstall, SourceStrategy,
BuildKind, BuildOptions, ConfigSettings, Constraints, IndexStrategy, LowerBound, Reinstall,
SourceStrategy,
};
use uv_configuration::{BuildOutput, Concurrency};
use uv_distribution::DistributionDatabase;
Expand Down Expand Up @@ -56,6 +57,7 @@ pub struct BuildDispatch<'a> {
exclude_newer: Option<ExcludeNewer>,
source_build_context: SourceBuildContext,
build_extra_env_vars: FxHashMap<OsString, OsString>,
bounds: LowerBound,
sources: SourceStrategy,
concurrency: Concurrency,
}
Expand All @@ -80,6 +82,7 @@ impl<'a> BuildDispatch<'a> {
build_options: &'a BuildOptions,
hasher: &'a HashStrategy,
exclude_newer: Option<ExcludeNewer>,
bounds: LowerBound,
sources: SourceStrategy,
concurrency: Concurrency,
) -> Self {
Expand All @@ -104,6 +107,7 @@ impl<'a> BuildDispatch<'a> {
exclude_newer,
source_build_context: SourceBuildContext::default(),
build_extra_env_vars: FxHashMap::default(),
bounds,
sources,
concurrency,
}
Expand Down Expand Up @@ -152,6 +156,10 @@ impl<'a> BuildContext for BuildDispatch<'a> {
self.config_settings
}

fn bounds(&self) -> LowerBound {
self.bounds
}

fn sources(&self) -> SourceStrategy {
self.sources
}
Expand Down
4 changes: 1 addition & 3 deletions crates/uv-distribution/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ pub use distribution_database::{DistributionDatabase, HttpArchivePointer, LocalA
pub use download::LocalWheel;
pub use error::Error;
pub use index::{BuiltWheelIndex, RegistryWheelIndex};
pub use metadata::{
ArchiveMetadata, LowerBound, LoweredRequirement, Metadata, MetadataError, RequiresDist,
};
pub use metadata::{ArchiveMetadata, LoweredRequirement, Metadata, MetadataError, RequiresDist};
pub use reporter::Reporter;
pub use source::prune;

Expand Down
28 changes: 13 additions & 15 deletions crates/uv-distribution/src/metadata/lowering.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::io;
use std::path::{Path, PathBuf};
use thiserror::Error;
use url::Url;

use uv_configuration::LowerBound;
use uv_distribution_filename::DistExtension;
use uv_distribution_types::{Index, IndexLocations, Origin};
use uv_git::GitReference;
Expand Down Expand Up @@ -171,7 +171,8 @@ impl LoweredRequirement {
index,
));
};
let source = registry_source(&requirement, index.into_url())?;
let source =
registry_source(&requirement, index.into_url(), lower_bound)?;
(source, marker)
}
Source::Workspace {
Expand Down Expand Up @@ -260,6 +261,7 @@ impl LoweredRequirement {
sources: &'data BTreeMap<PackageName, Sources>,
indexes: &'data [Index],
locations: &'data IndexLocations,
lower_bound: LowerBound,
) -> impl Iterator<Item = Result<Self, LoweringError>> + 'data {
let source = sources.get(&requirement.name).cloned();

Expand Down Expand Up @@ -354,7 +356,8 @@ impl LoweredRequirement {
index,
));
};
let source = registry_source(&requirement, index.into_url())?;
let source =
registry_source(&requirement, index.into_url(), lower_bound)?;
(source, marker)
}
Source::Workspace { .. } => {
Expand Down Expand Up @@ -487,13 +490,16 @@ fn url_source(url: Url, subdirectory: Option<PathBuf>) -> Result<RequirementSour
fn registry_source(
requirement: &uv_pep508::Requirement<VerbatimParsedUrl>,
index: Url,
bounds: LowerBound,
) -> Result<RequirementSource, LoweringError> {
match &requirement.version_or_url {
None => {
warn_user_once!(
"Missing version constraint (e.g., a lower bound) for `{}`",
requirement.name
);
if matches!(bounds, LowerBound::Warn) {
warn_user_once!(
"Missing version constraint (e.g., a lower bound) for `{}`",
requirement.name
);
}
Ok(RequirementSource::Registry {
specifier: VersionSpecifiers::empty(),
index: Some(index),
Expand Down Expand Up @@ -574,11 +580,3 @@ fn path_source(
})
}
}

#[derive(Debug, Copy, Clone)]
pub enum LowerBound {
/// Allow missing lower bounds.
Allow,
/// Warn about missing lower bounds.
Warn,
}
7 changes: 4 additions & 3 deletions crates/uv-distribution/src/metadata/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ use std::path::Path;

use thiserror::Error;

use uv_configuration::SourceStrategy;
use uv_configuration::{LowerBound, SourceStrategy};
use uv_distribution_types::IndexLocations;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers};
use uv_pypi_types::{HashDigest, ResolutionMetadata};
use uv_workspace::WorkspaceError;

pub use crate::metadata::lowering::LoweredRequirement;
use crate::metadata::lowering::LoweringError;
pub use crate::metadata::lowering::{LowerBound, LoweredRequirement};
pub use crate::metadata::requires_dist::RequiresDist;

mod lowering;
Expand Down Expand Up @@ -64,6 +64,7 @@ impl Metadata {
install_path: &Path,
locations: &IndexLocations,
sources: SourceStrategy,
bounds: LowerBound,
) -> Result<Self, MetadataError> {
// Lower the requirements.
let RequiresDist {
Expand All @@ -80,7 +81,7 @@ impl Metadata {
install_path,
locations,
sources,
LowerBound::Warn,
bounds,
)
.await?;

Expand Down
8 changes: 3 additions & 5 deletions crates/uv-distribution/src/metadata/requires_dist.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
use crate::metadata::lowering::LowerBound;
use crate::metadata::{LoweredRequirement, MetadataError};
use crate::Metadata;

use std::collections::BTreeMap;
use std::path::Path;
use uv_configuration::SourceStrategy;
use uv_configuration::{LowerBound, SourceStrategy};
use uv_distribution_types::IndexLocations;
use uv_normalize::{ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_workspace::pyproject::ToolUvSources;
Expand Down Expand Up @@ -198,12 +197,11 @@ mod test {
use anyhow::Context;
use indoc::indoc;
use insta::assert_snapshot;
use uv_configuration::SourceStrategy;
use uv_configuration::{LowerBound, SourceStrategy};
use uv_distribution_types::IndexLocations;
use uv_workspace::pyproject::PyProjectToml;
use uv_workspace::{DiscoveryOptions, ProjectWorkspace};

use crate::metadata::lowering::LowerBound;
use crate::RequiresDist;

async fn requires_dist_from_pyproject_toml(contents: &str) -> anyhow::Result<RequiresDist> {
Expand All @@ -228,7 +226,7 @@ mod test {
&project_workspace,
&IndexLocations::default(),
SourceStrategy::default(),
LowerBound::Warn,
LowerBound::default(),
)?)
}

Expand Down
25 changes: 17 additions & 8 deletions crates/uv-distribution/src/source/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,6 @@ use std::path::{Path, PathBuf};
use std::str::FromStr;
use std::sync::Arc;

use crate::distribution_database::ManagedClient;
use crate::error::Error;
use crate::metadata::{ArchiveMetadata, Metadata};
use crate::reporter::Facade;
use crate::source::built_wheel_metadata::BuiltWheelMetadata;
use crate::source::revision::Revision;
use crate::{LowerBound, Reporter, RequiresDist};
use fs_err::tokio as fs;
use futures::{FutureExt, TryStreamExt};
use reqwest::Response;
Expand All @@ -38,6 +31,14 @@ use uv_pypi_types::{HashDigest, Metadata12, RequiresTxt, ResolutionMetadata};
use uv_types::{BuildContext, SourceBuildTrait};
use zip::ZipArchive;

use crate::distribution_database::ManagedClient;
use crate::error::Error;
use crate::metadata::{ArchiveMetadata, Metadata};
use crate::reporter::Facade;
use crate::source::built_wheel_metadata::BuiltWheelMetadata;
use crate::source::revision::Revision;
use crate::{Reporter, RequiresDist};

mod built_wheel_metadata;
mod revision;

Expand Down Expand Up @@ -390,7 +391,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
project_root,
self.build_context.locations(),
self.build_context.sources(),
LowerBound::Warn,
self.build_context.bounds(),
)
.await?;
Ok(requires_dist)
Expand Down Expand Up @@ -1089,6 +1090,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
));
Expand Down Expand Up @@ -1124,6 +1126,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
));
Expand Down Expand Up @@ -1154,6 +1157,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
));
Expand Down Expand Up @@ -1200,6 +1204,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
))
Expand Down Expand Up @@ -1384,6 +1389,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
&path,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
));
Expand Down Expand Up @@ -1411,6 +1417,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
&path,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
));
Expand Down Expand Up @@ -1442,6 +1449,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
&path,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
));
Expand Down Expand Up @@ -1488,6 +1496,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
fetch.path(),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.bounds(),
)
.await?,
))
Expand Down
7 changes: 6 additions & 1 deletion crates/uv-types/src/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ use std::path::{Path, PathBuf};
use anyhow::Result;

use uv_cache::Cache;
use uv_configuration::{BuildKind, BuildOptions, BuildOutput, ConfigSettings, SourceStrategy};
use uv_configuration::{
BuildKind, BuildOptions, BuildOutput, ConfigSettings, LowerBound, SourceStrategy,
};
use uv_distribution_types::{
CachedDist, DependencyMetadata, IndexCapabilities, IndexLocations, InstalledDist, Resolution,
SourceDist,
Expand Down Expand Up @@ -75,6 +77,9 @@ pub trait BuildContext {
/// The [`ConfigSettings`] used to build distributions.
fn config_settings(&self) -> &ConfigSettings;

/// Whether to warn on missing lower bounds.
fn bounds(&self) -> LowerBound;

/// Whether to incorporate `tool.uv.sources` when resolving requirements.
fn sources(&self) -> SourceStrategy;

Expand Down
3 changes: 2 additions & 1 deletion crates/uv/src/commands/build_frontend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use uv_cache::{Cache, CacheBucket};
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
BuildKind, BuildOptions, BuildOutput, Concurrency, ConfigSettings, Constraints,
HashCheckingMode, IndexStrategy, KeyringProviderType, SourceStrategy, TrustedHost,
HashCheckingMode, IndexStrategy, KeyringProviderType, LowerBound, SourceStrategy, TrustedHost,
};
use uv_dispatch::BuildDispatch;
use uv_fs::Simplified;
Expand Down Expand Up @@ -486,6 +486,7 @@ async fn build_package(
build_options,
&hasher,
exclude_newer,
LowerBound::Allow,
sources,
concurrency,
);
Expand Down
Loading

0 comments on commit df7a681

Please sign in to comment.