From 12bfbed0ecf29e7d11cb200d0d3ede9adc0da98d Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 21 Apr 2025 18:58:39 -0400 Subject: [PATCH] Omit PEP 751 version for source trees (#13030) ## Summary This is a "MUST NOT" in the spec. --- .../src/lock/export/pylock_toml.rs | 23 ++++++++++++++++--- crates/uv/tests/it/export.rs | 10 -------- crates/uv/tests/it/pip_compile.rs | 1 - 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/crates/uv-resolver/src/lock/export/pylock_toml.rs b/crates/uv-resolver/src/lock/export/pylock_toml.rs index 7ce42bbaf..ef186dac8 100644 --- a/crates/uv-resolver/src/lock/export/pylock_toml.rs +++ b/crates/uv-resolver/src/lock/export/pylock_toml.rs @@ -289,10 +289,15 @@ impl<'lock> PylockToml { continue; } + // "The version MUST NOT be included when it cannot be guaranteed to be consistent with the code used (i.e. when a source tree is used)." + let version = version + .as_ref() + .filter(|_| !matches!(&**dist, Dist::Source(SourceDist::Directory(..)))); + // Create a `pylock.toml`-style package. let mut package = PylockTomlPackage { name: dist.name().clone(), - version: version.clone(), + version: version.cloned(), marker: node.marker.pep508(), requires_python: None, dependencies: vec![], @@ -737,9 +742,21 @@ impl<'lock> PylockToml { .index(target.install_path())? .map(IndexUrl::into_url); + // Extract the `packages.name` field. + let name = package.id.name.clone(); + + // Extract the `packages.version` field. + // "The version MUST NOT be included when it cannot be guaranteed to be consistent with the code used (i.e. when a source tree is used)." + let version = package + .id + .version + .as_ref() + .filter(|_| directory.is_none()) + .cloned(); + let package = PylockTomlPackage { - name: package.id.name.clone(), - version: package.id.version.clone(), + name, + version, marker: node.marker, requires_python: None, dependencies: vec![], diff --git a/crates/uv/tests/it/export.rs b/crates/uv/tests/it/export.rs index b48d3da4f..b5c7e5055 100644 --- a/crates/uv/tests/it/export.rs +++ b/crates/uv/tests/it/export.rs @@ -3281,7 +3281,6 @@ fn pep_751_dependency() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3343,7 +3342,6 @@ fn pep_751_export_no_header() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3454,7 +3452,6 @@ fn pep_751_dependency_extra() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3515,7 +3512,6 @@ fn pep_751_project_extra() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3555,7 +3551,6 @@ fn pep_751_project_extra() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3595,7 +3590,6 @@ fn pep_751_project_extra() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3642,7 +3636,6 @@ fn pep_751_project_extra() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3689,7 +3682,6 @@ fn pep_751_project_extra() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -3995,7 +3987,6 @@ fn pep_751_infer_output_format() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] @@ -4035,7 +4026,6 @@ fn pep_751_infer_output_format() -> Result<()> { [[packages]] name = "project" - version = "0.1.0" directory = { path = ".", editable = true } [[packages]] diff --git a/crates/uv/tests/it/pip_compile.rs b/crates/uv/tests/it/pip_compile.rs index 593dd5d24..308bed1eb 100644 --- a/crates/uv/tests/it/pip_compile.rs +++ b/crates/uv/tests/it/pip_compile.rs @@ -16420,7 +16420,6 @@ fn pep_751_compile_directory() -> Result<()> { [[packages]] name = "foo" - version = "1.0.0" directory = { path = "foo" } [[packages]]