From e008c43f29f7dd02b74a7bcd36cf57956a6b3adb Mon Sep 17 00:00:00 2001 From: konsti Date: Fri, 3 Nov 2023 09:16:44 +0100 Subject: [PATCH] Add PackageName::as_dist_info_name (#305) From https://packaging.python.org/en/latest/specifications/recording-installed-packages/#recording-installed-packages > This directory is named as {name}-{version}.dist-info, with name and version fields corresponding to Core metadata specifications. Both fields must be normalized (see Package name normalization and PEP 440 for the definition of normalization for each field respectively), and replace dash (-) characters with underscore (_) characters, so the .dist-info directory always has exactly one dash (-) character in its stem, separating the name and version fields. Follow up to #278 --- crates/install-wheel-rs/src/wheel.rs | 8 ++++++-- crates/puffin-normalize/src/package_name.rs | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/install-wheel-rs/src/wheel.rs b/crates/install-wheel-rs/src/wheel.rs index f1444d1a9..384b024ab 100644 --- a/crates/install-wheel-rs/src/wheel.rs +++ b/crates/install-wheel-rs/src/wheel.rs @@ -1030,8 +1030,12 @@ pub fn find_dist_info( filename: &WheelFilename, archive: &mut ZipArchive, ) -> Result { - let dist_info_matcher = - format!("{}-{}", filename.distribution, filename.version).to_lowercase(); + let dist_info_matcher = format!( + "{}-{}", + filename.distribution.as_dist_info_name(), + filename.version + ) + .to_lowercase(); let dist_infos: Vec<_> = archive .file_names() .filter_map(|name| name.split_once('/')) diff --git a/crates/puffin-normalize/src/package_name.rs b/crates/puffin-normalize/src/package_name.rs index d569dfb76..19f89d93a 100644 --- a/crates/puffin-normalize/src/package_name.rs +++ b/crates/puffin-normalize/src/package_name.rs @@ -36,6 +36,13 @@ impl PackageName { normalized.make_ascii_lowercase(); Self(normalized) } + + /// Escape this name with underscores (`_`) instead of dashes (`-`) + /// + /// See: + pub fn as_dist_info_name(&self) -> String { + self.0.replace('-', "_") + } } impl AsRef for PackageName {