File tree Expand file tree Collapse file tree 3 files changed +27
-1
lines changed
Expand file tree Collapse file tree 3 files changed +27
-1
lines changed Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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]
1626fn test_parse_egg ( ) {
1727 let dist = Distribution :: new ( "tests/fixtures/build-0.4.0-py3.9.egg" ) . unwrap ( ) ;
You can’t perform that action at this time.
0 commit comments