Skip to content

Commit 8f838ef

Browse files
committed
Fix metadata parsing for packages with vendored packages
1 parent f8ae2d0 commit 8f838ef

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/distribution.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,23 @@ impl Distribution {
222222
archive.by_name(file1)?.read_to_end(&mut buf)?;
223223
Metadata::parse(&buf)
224224
}
225-
_ => Err(Error::MultipleMetadataFiles(metadata_files)),
225+
_ => {
226+
let top_level_files: Vec<_> = metadata_files
227+
.iter()
228+
.filter(|f| {
229+
let path = Path::new(f);
230+
path.components().count() == 2
231+
})
232+
.collect();
233+
if top_level_files.len() == 1 {
234+
let mut buf = Vec::new();
235+
archive
236+
.by_name(&top_level_files[0])?
237+
.read_to_end(&mut buf)?;
238+
return Metadata::parse(&buf);
239+
}
240+
Err(Error::MultipleMetadataFiles(metadata_files))
241+
}
226242
}
227243
}
228244
}
96.4 KB
Binary file not shown.

tests/test_distribution.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ fn test_parse_wheel() {
1212
assert_eq!(dist.python_version(), "py2.py3");
1313
}
1414

15+
#[test]
16+
fn test_parse_wheel_with_vendored_pkgs() {
17+
let dist = Distribution::new("tests/fixtures/py-1.11.0-py2.py3-none-any.whl").unwrap();
18+
assert_eq!(dist.r#type(), DistributionType::Wheel);
19+
let metadata = dist.metadata();
20+
assert_eq!(metadata.metadata_version, "2.1");
21+
assert_eq!(metadata.name, "py");
22+
assert_eq!(dist.python_version(), "py2.py3");
23+
}
24+
1525
#[test]
1626
fn test_parse_egg() {
1727
let dist = Distribution::new("tests/fixtures/build-0.4.0-py3.9.egg").unwrap();

0 commit comments

Comments
 (0)