From f5b39298f3b9cbf12b118520fb02162d1a893593 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Fri, 23 May 2025 19:57:09 -0400 Subject: [PATCH] Omit license-file key for Metadata 2.1 --- Cargo.lock | 1 + crates/uv-publish/Cargo.toml | 1 + crates/uv-publish/src/lib.rs | 14 +++++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 053b113a4..6716b6a78 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5469,6 +5469,7 @@ dependencies = [ "uv-extract", "uv-fs", "uv-metadata", + "uv-pep440", "uv-pypi-types", "uv-static", "uv-warnings", diff --git a/crates/uv-publish/Cargo.toml b/crates/uv-publish/Cargo.toml index 254d83d03..02bb5fc4e 100644 --- a/crates/uv-publish/Cargo.toml +++ b/crates/uv-publish/Cargo.toml @@ -22,6 +22,7 @@ uv-distribution-types = { workspace = true } uv-extract = { workspace = true } uv-fs = { workspace = true } uv-metadata = { workspace = true } +uv-pep440 = { workspace = true } uv-pypi-types = { workspace = true } uv-static = { workspace = true } uv-warnings = { workspace = true } diff --git a/crates/uv-publish/src/lib.rs b/crates/uv-publish/src/lib.rs index 72e4d102a..a7fe3d74d 100644 --- a/crates/uv-publish/src/lib.rs +++ b/crates/uv-publish/src/lib.rs @@ -1,6 +1,7 @@ mod trusted_publishing; use std::path::{Path, PathBuf}; +use std::str::FromStr; use std::sync::Arc; use std::time::{Duration, SystemTime}; use std::{env, fmt, io}; @@ -37,6 +38,7 @@ use uv_distribution_types::{IndexCapabilities, IndexUrl}; use uv_extract::hash::{HashReader, Hasher}; use uv_fs::{ProgressReader, Simplified}; use uv_metadata::read_metadata_async_seek; +use uv_pep440::Version; use uv_pypi_types::{HashAlgorithm, HashDigest, Metadata23, MetadataError}; use uv_static::EnvVars; use uv_warnings::{warn_user, warn_user_once}; @@ -732,7 +734,6 @@ async fn form_metadata( add_vec("classifiers", classifiers); add_vec("dynamic", dynamic); - add_vec("license_file", license_files); add_vec("obsoletes_dist", obsoletes_dist); add_vec("platform", platforms); add_vec("project_urls", project_urls); @@ -741,6 +742,17 @@ async fn form_metadata( add_vec("requires_dist", requires_dist); add_vec("requires_external", requires_external); + // See: https://github.com/pypa/setuptools/issues/4759 + if Version::from_str(&metadata_version).is_ok_and(|version| version == Version::new([2, 1])) { + if !license_files.is_empty() { + warn!( + "`license_file` was introduced in Metadata 2.4, but the metadata version is {metadata_version}; omitting..." + ); + } + } else { + add_vec("license_file", license_files); + } + Ok(form_metadata) }