From b71973cd7be61e8fc4695a22255d29fe19ad4db5 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Mar 2024 09:21:54 -0500 Subject: [PATCH] Fix priority of ABI tags (#2489) Brings us in-line with Python's behavior: 1. Prioritize `none` tags _after_ all of the relevant platform tags 2. Omit `none` tags for CPython versions less than the current version 3. Prioritize major (i.e. `py3-none`) version tags over minor (i.e. `py3x-none`) version tags less than the current version 4. Add a `none-any` tag for the current CPython version ## Test plan Tested on my Linux machine with a script to emit tags at the desired glibc version: ```python from packaging import tags import re exclude = re.compile("_(21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39)_") for tag in tags.sys_tags(): if exclude.search(str(tag)): continue print(tag) ``` Then performed a diff with the snapshot in `tags.rs` --- crates/platform-tags/src/tags.rs | 257 +++++++++++++++++-------------- 1 file changed, 138 insertions(+), 119 deletions(-) diff --git a/crates/platform-tags/src/tags.rs b/crates/platform-tags/src/tags.rs index ed28b6462..39023a15a 100644 --- a/crates/platform-tags/src/tags.rs +++ b/crates/platform-tags/src/tags.rs @@ -106,11 +106,6 @@ impl Tags { implementation.abi_tag(python_version, implementation_version), platform_tag.clone(), )); - tags.push(( - implementation.language_tag(python_version), - "none".to_string(), - platform_tag.clone(), - )); } // 2. abi3 and no abi (e.g. executable binary) if matches!(implementation, Implementation::CPython) { @@ -123,6 +118,16 @@ impl Tags { platform_tag.clone(), )); } + // Only include `none` tags for the current CPython version + if minor == python_version.1 { + for platform_tag in &platform_tags { + tags.push(( + implementation.language_tag((python_version.0, minor)), + "none".to_string(), + platform_tag.clone(), + )); + } + } } } // 3. no abi (e.g. executable binary) @@ -134,28 +139,40 @@ impl Tags { platform_tag.clone(), )); } + // After the matching version emit `none` tags for the major version i.e. `py3` + if minor == python_version.1 { + for platform_tag in &platform_tags { + tags.push(( + format!("py{}", python_version.0), + "none".to_string(), + platform_tag.clone(), + )); + } + } } - // 4. major only - for platform_tag in platform_tags { + // 4. no binary + if matches!(implementation, Implementation::CPython) { tags.push(( - format!("py{}", python_version.0), + format!("cp{}{}", python_version.0, python_version.1), "none".to_string(), - platform_tag, + "any".to_string(), )); } - // 5. no binary for minor in (0..=python_version.1).rev() { tags.push(( format!("py{}{}", python_version.0, minor), "none".to_string(), "any".to_string(), )); + // After the matching version emit `none` tags for the major version i.e. `py3` + if minor == python_version.1 { + tags.push(( + format!("py{}", python_version.0), + "none".to_string(), + "any".to_string(), + )); + } } - tags.push(( - format!("py{}", python_version.0), - "none".to_string(), - "any".to_string(), - )); Ok(Self::new(tags)) } @@ -764,61 +781,33 @@ mod tests { tags, @r###" cp39-cp39-manylinux_2_28_x86_64 - cp39-none-manylinux_2_28_x86_64 cp39-cp39-manylinux_2_27_x86_64 - cp39-none-manylinux_2_27_x86_64 cp39-cp39-manylinux_2_26_x86_64 - cp39-none-manylinux_2_26_x86_64 cp39-cp39-manylinux_2_25_x86_64 - cp39-none-manylinux_2_25_x86_64 cp39-cp39-manylinux_2_24_x86_64 - cp39-none-manylinux_2_24_x86_64 cp39-cp39-manylinux_2_23_x86_64 - cp39-none-manylinux_2_23_x86_64 cp39-cp39-manylinux_2_22_x86_64 - cp39-none-manylinux_2_22_x86_64 cp39-cp39-manylinux_2_21_x86_64 - cp39-none-manylinux_2_21_x86_64 cp39-cp39-manylinux_2_20_x86_64 - cp39-none-manylinux_2_20_x86_64 cp39-cp39-manylinux_2_19_x86_64 - cp39-none-manylinux_2_19_x86_64 cp39-cp39-manylinux_2_18_x86_64 - cp39-none-manylinux_2_18_x86_64 cp39-cp39-manylinux_2_17_x86_64 - cp39-none-manylinux_2_17_x86_64 cp39-cp39-manylinux2014_x86_64 - cp39-none-manylinux2014_x86_64 cp39-cp39-manylinux_2_16_x86_64 - cp39-none-manylinux_2_16_x86_64 cp39-cp39-manylinux_2_15_x86_64 - cp39-none-manylinux_2_15_x86_64 cp39-cp39-manylinux_2_14_x86_64 - cp39-none-manylinux_2_14_x86_64 cp39-cp39-manylinux_2_13_x86_64 - cp39-none-manylinux_2_13_x86_64 cp39-cp39-manylinux_2_12_x86_64 - cp39-none-manylinux_2_12_x86_64 cp39-cp39-manylinux2010_x86_64 - cp39-none-manylinux2010_x86_64 cp39-cp39-manylinux_2_11_x86_64 - cp39-none-manylinux_2_11_x86_64 cp39-cp39-manylinux_2_10_x86_64 - cp39-none-manylinux_2_10_x86_64 cp39-cp39-manylinux_2_9_x86_64 - cp39-none-manylinux_2_9_x86_64 cp39-cp39-manylinux_2_8_x86_64 - cp39-none-manylinux_2_8_x86_64 cp39-cp39-manylinux_2_7_x86_64 - cp39-none-manylinux_2_7_x86_64 cp39-cp39-manylinux_2_6_x86_64 - cp39-none-manylinux_2_6_x86_64 cp39-cp39-manylinux_2_5_x86_64 - cp39-none-manylinux_2_5_x86_64 cp39-cp39-manylinux1_x86_64 - cp39-none-manylinux1_x86_64 cp39-cp39-linux_x86_64 - cp39-none-linux_x86_64 cp39-abi3-manylinux_2_28_x86_64 cp39-abi3-manylinux_2_27_x86_64 cp39-abi3-manylinux_2_26_x86_64 @@ -847,6 +836,34 @@ mod tests { cp39-abi3-manylinux_2_5_x86_64 cp39-abi3-manylinux1_x86_64 cp39-abi3-linux_x86_64 + cp39-none-manylinux_2_28_x86_64 + cp39-none-manylinux_2_27_x86_64 + cp39-none-manylinux_2_26_x86_64 + cp39-none-manylinux_2_25_x86_64 + cp39-none-manylinux_2_24_x86_64 + cp39-none-manylinux_2_23_x86_64 + cp39-none-manylinux_2_22_x86_64 + cp39-none-manylinux_2_21_x86_64 + cp39-none-manylinux_2_20_x86_64 + cp39-none-manylinux_2_19_x86_64 + cp39-none-manylinux_2_18_x86_64 + cp39-none-manylinux_2_17_x86_64 + cp39-none-manylinux2014_x86_64 + cp39-none-manylinux_2_16_x86_64 + cp39-none-manylinux_2_15_x86_64 + cp39-none-manylinux_2_14_x86_64 + cp39-none-manylinux_2_13_x86_64 + cp39-none-manylinux_2_12_x86_64 + cp39-none-manylinux2010_x86_64 + cp39-none-manylinux_2_11_x86_64 + cp39-none-manylinux_2_10_x86_64 + cp39-none-manylinux_2_9_x86_64 + cp39-none-manylinux_2_8_x86_64 + cp39-none-manylinux_2_7_x86_64 + cp39-none-manylinux_2_6_x86_64 + cp39-none-manylinux_2_5_x86_64 + cp39-none-manylinux1_x86_64 + cp39-none-linux_x86_64 cp38-abi3-manylinux_2_28_x86_64 cp38-abi3-manylinux_2_27_x86_64 cp38-abi3-manylinux_2_26_x86_64 @@ -1071,6 +1088,34 @@ mod tests { py39-none-manylinux_2_5_x86_64 py39-none-manylinux1_x86_64 py39-none-linux_x86_64 + py3-none-manylinux_2_28_x86_64 + py3-none-manylinux_2_27_x86_64 + py3-none-manylinux_2_26_x86_64 + py3-none-manylinux_2_25_x86_64 + py3-none-manylinux_2_24_x86_64 + py3-none-manylinux_2_23_x86_64 + py3-none-manylinux_2_22_x86_64 + py3-none-manylinux_2_21_x86_64 + py3-none-manylinux_2_20_x86_64 + py3-none-manylinux_2_19_x86_64 + py3-none-manylinux_2_18_x86_64 + py3-none-manylinux_2_17_x86_64 + py3-none-manylinux2014_x86_64 + py3-none-manylinux_2_16_x86_64 + py3-none-manylinux_2_15_x86_64 + py3-none-manylinux_2_14_x86_64 + py3-none-manylinux_2_13_x86_64 + py3-none-manylinux_2_12_x86_64 + py3-none-manylinux2010_x86_64 + py3-none-manylinux_2_11_x86_64 + py3-none-manylinux_2_10_x86_64 + py3-none-manylinux_2_9_x86_64 + py3-none-manylinux_2_8_x86_64 + py3-none-manylinux_2_7_x86_64 + py3-none-manylinux_2_6_x86_64 + py3-none-manylinux_2_5_x86_64 + py3-none-manylinux1_x86_64 + py3-none-linux_x86_64 py38-none-manylinux_2_28_x86_64 py38-none-manylinux_2_27_x86_64 py38-none-manylinux_2_26_x86_64 @@ -1323,35 +1368,9 @@ mod tests { py30-none-manylinux_2_5_x86_64 py30-none-manylinux1_x86_64 py30-none-linux_x86_64 - py3-none-manylinux_2_28_x86_64 - py3-none-manylinux_2_27_x86_64 - py3-none-manylinux_2_26_x86_64 - py3-none-manylinux_2_25_x86_64 - py3-none-manylinux_2_24_x86_64 - py3-none-manylinux_2_23_x86_64 - py3-none-manylinux_2_22_x86_64 - py3-none-manylinux_2_21_x86_64 - py3-none-manylinux_2_20_x86_64 - py3-none-manylinux_2_19_x86_64 - py3-none-manylinux_2_18_x86_64 - py3-none-manylinux_2_17_x86_64 - py3-none-manylinux2014_x86_64 - py3-none-manylinux_2_16_x86_64 - py3-none-manylinux_2_15_x86_64 - py3-none-manylinux_2_14_x86_64 - py3-none-manylinux_2_13_x86_64 - py3-none-manylinux_2_12_x86_64 - py3-none-manylinux2010_x86_64 - py3-none-manylinux_2_11_x86_64 - py3-none-manylinux_2_10_x86_64 - py3-none-manylinux_2_9_x86_64 - py3-none-manylinux_2_8_x86_64 - py3-none-manylinux_2_7_x86_64 - py3-none-manylinux_2_6_x86_64 - py3-none-manylinux_2_5_x86_64 - py3-none-manylinux1_x86_64 - py3-none-linux_x86_64 + cp39-none-any py39-none-any + py3-none-any py38-none-any py37-none-any py36-none-any @@ -1361,7 +1380,6 @@ mod tests { py32-none-any py31-none-any py30-none-any - py3-none-any "### ); } @@ -1385,51 +1403,28 @@ mod tests { tags, @r###" cp39-cp39-macosx_14_0_arm64 - cp39-none-macosx_14_0_arm64 cp39-cp39-macosx_14_0_universal2 - cp39-none-macosx_14_0_universal2 cp39-cp39-macosx_13_0_arm64 - cp39-none-macosx_13_0_arm64 cp39-cp39-macosx_13_0_universal2 - cp39-none-macosx_13_0_universal2 cp39-cp39-macosx_12_0_arm64 - cp39-none-macosx_12_0_arm64 cp39-cp39-macosx_12_0_universal2 - cp39-none-macosx_12_0_universal2 cp39-cp39-macosx_11_0_arm64 - cp39-none-macosx_11_0_arm64 cp39-cp39-macosx_11_0_universal2 - cp39-none-macosx_11_0_universal2 cp39-cp39-macosx_10_0_arm64 - cp39-none-macosx_10_0_arm64 cp39-cp39-macosx_10_0_universal2 - cp39-none-macosx_10_0_universal2 cp39-cp39-macosx_10_16_universal2 - cp39-none-macosx_10_16_universal2 cp39-cp39-macosx_10_15_universal2 - cp39-none-macosx_10_15_universal2 cp39-cp39-macosx_10_14_universal2 - cp39-none-macosx_10_14_universal2 cp39-cp39-macosx_10_13_universal2 - cp39-none-macosx_10_13_universal2 cp39-cp39-macosx_10_12_universal2 - cp39-none-macosx_10_12_universal2 cp39-cp39-macosx_10_11_universal2 - cp39-none-macosx_10_11_universal2 cp39-cp39-macosx_10_10_universal2 - cp39-none-macosx_10_10_universal2 cp39-cp39-macosx_10_9_universal2 - cp39-none-macosx_10_9_universal2 cp39-cp39-macosx_10_8_universal2 - cp39-none-macosx_10_8_universal2 cp39-cp39-macosx_10_7_universal2 - cp39-none-macosx_10_7_universal2 cp39-cp39-macosx_10_6_universal2 - cp39-none-macosx_10_6_universal2 cp39-cp39-macosx_10_5_universal2 - cp39-none-macosx_10_5_universal2 cp39-cp39-macosx_10_4_universal2 - cp39-none-macosx_10_4_universal2 cp39-abi3-macosx_14_0_arm64 cp39-abi3-macosx_14_0_universal2 cp39-abi3-macosx_13_0_arm64 @@ -1453,6 +1448,29 @@ mod tests { cp39-abi3-macosx_10_6_universal2 cp39-abi3-macosx_10_5_universal2 cp39-abi3-macosx_10_4_universal2 + cp39-none-macosx_14_0_arm64 + cp39-none-macosx_14_0_universal2 + cp39-none-macosx_13_0_arm64 + cp39-none-macosx_13_0_universal2 + cp39-none-macosx_12_0_arm64 + cp39-none-macosx_12_0_universal2 + cp39-none-macosx_11_0_arm64 + cp39-none-macosx_11_0_universal2 + cp39-none-macosx_10_0_arm64 + cp39-none-macosx_10_0_universal2 + cp39-none-macosx_10_16_universal2 + cp39-none-macosx_10_15_universal2 + cp39-none-macosx_10_14_universal2 + cp39-none-macosx_10_13_universal2 + cp39-none-macosx_10_12_universal2 + cp39-none-macosx_10_11_universal2 + cp39-none-macosx_10_10_universal2 + cp39-none-macosx_10_9_universal2 + cp39-none-macosx_10_8_universal2 + cp39-none-macosx_10_7_universal2 + cp39-none-macosx_10_6_universal2 + cp39-none-macosx_10_5_universal2 + cp39-none-macosx_10_4_universal2 cp38-abi3-macosx_14_0_arm64 cp38-abi3-macosx_14_0_universal2 cp38-abi3-macosx_13_0_arm64 @@ -1637,6 +1655,29 @@ mod tests { py39-none-macosx_10_6_universal2 py39-none-macosx_10_5_universal2 py39-none-macosx_10_4_universal2 + py3-none-macosx_14_0_arm64 + py3-none-macosx_14_0_universal2 + py3-none-macosx_13_0_arm64 + py3-none-macosx_13_0_universal2 + py3-none-macosx_12_0_arm64 + py3-none-macosx_12_0_universal2 + py3-none-macosx_11_0_arm64 + py3-none-macosx_11_0_universal2 + py3-none-macosx_10_0_arm64 + py3-none-macosx_10_0_universal2 + py3-none-macosx_10_16_universal2 + py3-none-macosx_10_15_universal2 + py3-none-macosx_10_14_universal2 + py3-none-macosx_10_13_universal2 + py3-none-macosx_10_12_universal2 + py3-none-macosx_10_11_universal2 + py3-none-macosx_10_10_universal2 + py3-none-macosx_10_9_universal2 + py3-none-macosx_10_8_universal2 + py3-none-macosx_10_7_universal2 + py3-none-macosx_10_6_universal2 + py3-none-macosx_10_5_universal2 + py3-none-macosx_10_4_universal2 py38-none-macosx_14_0_arm64 py38-none-macosx_14_0_universal2 py38-none-macosx_13_0_arm64 @@ -1844,30 +1885,9 @@ mod tests { py30-none-macosx_10_6_universal2 py30-none-macosx_10_5_universal2 py30-none-macosx_10_4_universal2 - py3-none-macosx_14_0_arm64 - py3-none-macosx_14_0_universal2 - py3-none-macosx_13_0_arm64 - py3-none-macosx_13_0_universal2 - py3-none-macosx_12_0_arm64 - py3-none-macosx_12_0_universal2 - py3-none-macosx_11_0_arm64 - py3-none-macosx_11_0_universal2 - py3-none-macosx_10_0_arm64 - py3-none-macosx_10_0_universal2 - py3-none-macosx_10_16_universal2 - py3-none-macosx_10_15_universal2 - py3-none-macosx_10_14_universal2 - py3-none-macosx_10_13_universal2 - py3-none-macosx_10_12_universal2 - py3-none-macosx_10_11_universal2 - py3-none-macosx_10_10_universal2 - py3-none-macosx_10_9_universal2 - py3-none-macosx_10_8_universal2 - py3-none-macosx_10_7_universal2 - py3-none-macosx_10_6_universal2 - py3-none-macosx_10_5_universal2 - py3-none-macosx_10_4_universal2 + cp39-none-any py39-none-any + py3-none-any py38-none-any py37-none-any py36-none-any @@ -1877,7 +1897,6 @@ mod tests { py32-none-any py31-none-any py30-none-any - py3-none-any "### ); }