Revert treating 'Dynamic' values as case-insensitive (#18692)

#18669 is the cause of #18690. This PR reverts #18669 to address the
regression.
This commit is contained in:
Zsolt Dollenstein
2026-03-24 12:40:55 +00:00
committed by GitHub
parent 63f63b0ca2
commit 82aa312db5
@@ -79,7 +79,7 @@ impl ResolutionMetadata {
.collect::<Box<_>>();
let dynamic = headers
.get_all_values("Dynamic")
.any(|field| field.eq_ignore_ascii_case("Version"));
.any(|field| field == "Version");
Ok(Self {
name,
@@ -112,15 +112,12 @@ impl ResolutionMetadata {
// If any of the fields we need are marked as dynamic, we can't use the `PKG-INFO` file.
let mut dynamic = false;
for field in headers.get_all_values("Dynamic") {
let field = field.as_str();
if field.eq_ignore_ascii_case("Requires-Python") {
return Err(MetadataError::DynamicField("Requires-Python"));
} else if field.eq_ignore_ascii_case("Requires-Dist") {
return Err(MetadataError::DynamicField("Requires-Dist"));
} else if field.eq_ignore_ascii_case("Provides-Extra") {
return Err(MetadataError::DynamicField("Provides-Extra"));
} else if field.eq_ignore_ascii_case("Version") {
dynamic = true;
match field.as_str() {
"Requires-Python" => return Err(MetadataError::DynamicField("Requires-Python")),
"Requires-Dist" => return Err(MetadataError::DynamicField("Requires-Dist")),
"Provides-Extra" => return Err(MetadataError::DynamicField("Provides-Extra")),
"Version" => dynamic = true,
_ => (),
}
}
@@ -337,25 +334,6 @@ mod tests {
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap_err();
assert!(matches!(meta, MetadataError::DynamicField("Requires-Dist")));
// Dynamic field values should be matched case-insensitively.
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0\nDynamic: requires-dist";
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap_err();
assert!(matches!(meta, MetadataError::DynamicField("Requires-Dist")));
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0\nDynamic: requires-python";
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap_err();
assert!(matches!(
meta,
MetadataError::DynamicField("Requires-Python")
));
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0\nDynamic: provides-extra";
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap_err();
assert!(matches!(
meta,
MetadataError::DynamicField("Provides-Extra")
));
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0\nRequires-Dist: foo";
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap();
assert_eq!(meta.name, PackageName::from_str("asdf").unwrap());