From dd4b27bfbdacff33ebfcf9bccb971413240533b3 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 11 Nov 2024 14:02:37 -0500 Subject: [PATCH] Allow `--no-build` to validate lock (#9024) ## Summary Just as we don't enforce tag compliance, we shouldn't enforce `--no-build` when validating the lockfile. If we end up building from source, the distribution database will correctly error. Closes https://github.com/astral-sh/uv/issues/9016. --- crates/uv-resolver/src/lock/mod.rs | 8 ++++++-- crates/uv/src/commands/project/lock.rs | 6 +----- crates/uv/tests/it/sync.rs | 4 +--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/crates/uv-resolver/src/lock/mod.rs b/crates/uv-resolver/src/lock/mod.rs index 540a597a6..577a047c7 100644 --- a/crates/uv-resolver/src/lock/mod.rs +++ b/crates/uv-resolver/src/lock/mod.rs @@ -974,7 +974,6 @@ impl Lock { overrides: &[Requirement], dependency_metadata: &DependencyMetadata, indexes: Option<&IndexLocations>, - build_options: &BuildOptions, tags: &Tags, hasher: &HashStrategy, index: &InMemoryIndex, @@ -1183,8 +1182,13 @@ impl Lock { // Get the metadata for the distribution. let dist = package.to_dist( workspace.install_path(), + // When validating, it's okay to use wheels that don't match the current platform. TagPolicy::Preferred(tags), - build_options, + // When validating, it's okay to use (e.g.) a source distribution with `--no-build`. + // We're just trying to determine whether the lockfile is up-to-date. If we end + // up needing to build a source distribution in order to do so, below, we'll error + // there. + &BuildOptions::default(), )?; // Fetch the metadata for the distribution. diff --git a/crates/uv/src/commands/project/lock.rs b/crates/uv/src/commands/project/lock.rs index f7ad9b990..9e141d3df 100644 --- a/crates/uv/src/commands/project/lock.rs +++ b/crates/uv/src/commands/project/lock.rs @@ -11,8 +11,7 @@ use tracing::debug; use uv_cache::Cache; use uv_client::{Connectivity, FlatIndexClient, RegistryClientBuilder}; use uv_configuration::{ - BuildOptions, Concurrency, Constraints, ExtrasSpecification, LowerBound, Reinstall, - TrustedHost, Upgrade, + Concurrency, Constraints, ExtrasSpecification, LowerBound, Reinstall, TrustedHost, Upgrade, }; use uv_dispatch::BuildDispatch; use uv_distribution::DistributionDatabase; @@ -531,7 +530,6 @@ async fn do_lock( interpreter, &requires_python, index_locations, - build_options, upgrade, &options, &hasher, @@ -714,7 +712,6 @@ impl ValidatedLock { interpreter: &Interpreter, requires_python: &RequiresPython, index_locations: &IndexLocations, - build_options: &BuildOptions, upgrade: &Upgrade, options: &Options, hasher: &HashStrategy, @@ -841,7 +838,6 @@ impl ValidatedLock { overrides, dependency_metadata, indexes, - build_options, interpreter.tags()?, hasher, index, diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs index 86d038722..f95f9d4d1 100644 --- a/crates/uv/tests/it/sync.rs +++ b/crates/uv/tests/it/sync.rs @@ -1997,20 +1997,18 @@ fn no_install_project_no_build() -> Result<()> { ----- stdout ----- ----- stderr ----- - warning: Failed to validate existing lockfile: Distribution `project==0.1.0 @ editable+.` can't be installed because it is marked as `--no-build` but has no binary distribution Resolved 4 packages in [TIME] error: Distribution `project==0.1.0 @ editable+.` can't be installed because it is marked as `--no-build` but has no binary distribution "###); // But it's fine to combine `--no-install-project` with `--no-build`. We shouldn't error, since // we aren't building the project. - uv_snapshot!(context.filters(), context.sync().arg("--no-install-project").arg("--no-build"), @r###" + uv_snapshot!(context.filters(), context.sync().arg("--no-install-project").arg("--no-build").arg("--locked"), @r###" success: true exit_code: 0 ----- stdout ----- ----- stderr ----- - warning: Failed to validate existing lockfile: Distribution `project==0.1.0 @ editable+.` can't be installed because it is marked as `--no-build` but has no binary distribution Resolved 4 packages in [TIME] Prepared 3 packages in [TIME] Installed 3 packages in [TIME]