Skip to content

Commit 798529c

Browse files
authored
Revert "Remove tar and tar.xz sdist support since PyPI does not support them"
This reverts commit 643bf04.
1 parent 9d03a29 commit 798529c

File tree

5 files changed

+33
-1
lines changed

5 files changed

+33
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ fs-err = "2.6.0"
1818
mailparse = "0.13.4"
1919
serde = { version = "1.0.126", features = ["derive"], optional = true }
2020
tar = "0.4.35"
21+
xz = "0.1.0"
2122
zip = "0.5.12"

src/distribution.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::str::FromStr;
55

66
use bzip2::read::BzDecoder;
77
use flate2::read::GzDecoder;
8+
use xz::read::XzDecoder;
89
use zip::ZipArchive;
910

1011
use crate::{Error, Metadata};
@@ -23,8 +24,10 @@ pub enum DistributionType {
2324
#[derive(Debug, Clone, Copy)]
2425
enum SDistType {
2526
Zip,
27+
Tar,
2628
GzTar,
2729
BzTar,
30+
XzTar,
2831
}
2932

3033
/// Python package distribution
@@ -51,8 +54,10 @@ impl FromStr for SDistType {
5154
fn from_str(s: &str) -> Result<Self, Self::Err> {
5255
let dist_type = match s {
5356
"zip" => SDistType::Zip,
57+
"tar" => SDistType::Tar,
5458
"gz" => SDistType::GzTar,
5559
"bz2" => SDistType::BzTar,
60+
"xz" => SDistType::XzTar,
5661
_ => return Err(Error::UnknownDistributionType),
5762
};
5863
Ok(dist_type)
@@ -65,7 +70,7 @@ impl Distribution {
6570
let path = path.as_ref();
6671
if let Some(ext) = path.extension().and_then(|ext| ext.to_str()) {
6772
let dist_type = match ext {
68-
"zip" | "gz" | "bz2" => DistributionType::SDist,
73+
"zip" | "tar" | "gz" | "bz2" | "xz" => DistributionType::SDist,
6974
"egg" => DistributionType::Egg,
7075
"whl" => DistributionType::Wheel,
7176
_ => return Err(Error::UnknownDistributionType),
@@ -136,9 +141,13 @@ impl Distribution {
136141
SDistType::GzTar => {
137142
Self::parse_tar(GzDecoder::new(BufReader::new(fs_err::File::open(path)?)))
138143
}
144+
SDistType::Tar => Self::parse_tar(BufReader::new(fs_err::File::open(path)?)),
139145
SDistType::BzTar => {
140146
Self::parse_tar(BzDecoder::new(BufReader::new(fs_err::File::open(path)?)))
141147
}
148+
SDistType::XzTar => {
149+
Self::parse_tar(XzDecoder::new(BufReader::new(fs_err::File::open(path)?)))
150+
}
142151
}
143152
}
144153

tests/fixtures/build-0.4.0.tar

90 KB
Binary file not shown.

tests/fixtures/build-0.4.0.tar.xz

11.6 KB
Binary file not shown.

tests/test_distribution.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ fn test_parse_sdist_zip() {
3636
assert_eq!(dist.python_version(), "source");
3737
}
3838

39+
#[test]
40+
fn test_parse_sdist_tar() {
41+
let dist = Distribution::new("tests/fixtures/build-0.4.0.tar").unwrap();
42+
assert_eq!(dist.r#type(), DistributionType::SDist);
43+
let metadata = dist.metadata();
44+
assert_eq!(metadata.metadata_version, "2.1");
45+
assert_eq!(metadata.name, "build");
46+
assert!(metadata.home_page.is_none());
47+
assert!(metadata.download_url.is_none());
48+
}
49+
3950
#[test]
4051
fn test_parse_sdist_tar_gz() {
4152
let dist = Distribution::new("tests/fixtures/build-0.4.0.tar.gz").unwrap();
@@ -59,3 +70,14 @@ fn test_parse_sdist_tar_bz2() {
5970
assert!(metadata.download_url.is_none());
6071
assert_eq!(dist.python_version(), "source");
6172
}
73+
74+
#[test]
75+
fn test_parse_sdist_tar_xz() {
76+
let dist = Distribution::new("tests/fixtures/build-0.4.0.tar.xz").unwrap();
77+
assert_eq!(dist.r#type(), DistributionType::SDist);
78+
let metadata = dist.metadata();
79+
assert_eq!(metadata.metadata_version, "2.1");
80+
assert_eq!(metadata.name, "build");
81+
assert!(metadata.home_page.is_none());
82+
assert!(metadata.download_url.is_none());
83+
}

0 commit comments

Comments
 (0)