@@ -27,9 +27,29 @@ pub enum DistExtension {
2727) ]
2828#[ rkyv( derive( Debug ) ) ]
2929pub enum SourceDistExtension {
30+ TarGz ,
31+ Legacy ( LegacySourceDistExtension ) ,
32+ }
33+
34+ #[ derive(
35+ Clone ,
36+ Copy ,
37+ Debug ,
38+ PartialEq ,
39+ Eq ,
40+ PartialOrd ,
41+ Ord ,
42+ Hash ,
43+ Serialize ,
44+ Deserialize ,
45+ rkyv:: Archive ,
46+ rkyv:: Deserialize ,
47+ rkyv:: Serialize ,
48+ ) ]
49+ #[ rkyv( derive( Debug ) ) ]
50+ pub enum LegacySourceDistExtension {
3051 Tar ,
3152 TarBz2 ,
32- TarGz ,
3353 TarLz ,
3454 TarLzma ,
3555 TarXz ,
@@ -83,41 +103,49 @@ impl SourceDistExtension {
83103
84104 match extension {
85105 "gz" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: TarGz ) ,
86- // TODO: Remove these other extensions in the future.
87- // NOTE: These get parsed from network sources like PyPI, so we don't
88- // necessarily want to hard-fail, just skip in the future.
89- "zip" => Ok ( Self :: Zip ) ,
90- "tar" => Ok ( Self :: Tar ) ,
91- "tgz" => Ok ( Self :: Tgz ) ,
92- "tbz" => Ok ( Self :: Tbz ) ,
93- "txz" => Ok ( Self :: Txz ) ,
94- "tlz" => Ok ( Self :: Tlz ) ,
95- "bz2" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: TarBz2 ) ,
96- "xz" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: TarXz ) ,
97- "lz" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: TarLz ) ,
98- "lzma" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: TarLzma ) ,
99- "zst" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: TarZst ) ,
106+ "zip" => Ok ( Self :: Legacy ( LegacySourceDistExtension :: Zip ) ) ,
107+ "tar" => Ok ( Self :: Legacy ( LegacySourceDistExtension :: Tar ) ) ,
108+ "tgz" => Ok ( Self :: Legacy ( LegacySourceDistExtension :: Tgz ) ) ,
109+ "tbz" => Ok ( Self :: Legacy ( LegacySourceDistExtension :: Tbz ) ) ,
110+ "txz" => Ok ( Self :: Legacy ( LegacySourceDistExtension :: Txz ) ) ,
111+ "tlz" => Ok ( Self :: Legacy ( LegacySourceDistExtension :: Tlz ) ) ,
112+ "bz2" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: Legacy ( LegacySourceDistExtension :: TarBz2 ) ) ,
113+ "xz" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: Legacy ( LegacySourceDistExtension :: TarXz ) ) ,
114+ "lz" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: Legacy ( LegacySourceDistExtension :: TarLz ) ) ,
115+ "lzma" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: Legacy ( LegacySourceDistExtension :: TarLzma ) ) ,
116+ "zst" if is_tar ( path. as_ref ( ) ) => Ok ( Self :: Legacy ( LegacySourceDistExtension :: TarZst ) ) ,
100117 _ => Err ( ExtensionError :: SourceDist ) ,
101118 }
102119 }
103120
104121 /// Return the name for the extension.
105122 pub fn name ( & self ) -> & ' static str {
106123 match self {
107- Self :: Tar => "tar" ,
108- Self :: TarBz2 => "tar.bz2" ,
109124 Self :: TarGz => "tar.gz" ,
110- Self :: TarLz => "tar.lz" ,
111- Self :: TarLzma => "tar.lzma" ,
112- Self :: TarXz => "tar.xz" ,
113- Self :: TarZst => "tar.zst" ,
114- Self :: Tbz => "tbz" ,
115- Self :: Tgz => "tgz" ,
116- Self :: Tlz => "tlz" ,
117- Self :: Txz => "txz" ,
118- Self :: Zip => "zip" ,
125+ Self :: Legacy ( LegacySourceDistExtension :: Tar ) => "tar" ,
126+ Self :: Legacy ( LegacySourceDistExtension :: TarBz2 ) => "tar.bz2" ,
127+ Self :: Legacy ( LegacySourceDistExtension :: TarLz ) => "tar.lz" ,
128+ Self :: Legacy ( LegacySourceDistExtension :: TarLzma ) => "tar.lzma" ,
129+ Self :: Legacy ( LegacySourceDistExtension :: TarXz ) => "tar.xz" ,
130+ Self :: Legacy ( LegacySourceDistExtension :: TarZst ) => "tar.zst" ,
131+ Self :: Legacy ( LegacySourceDistExtension :: Tbz ) => "tbz" ,
132+ Self :: Legacy ( LegacySourceDistExtension :: Tgz ) => "tgz" ,
133+ Self :: Legacy ( LegacySourceDistExtension :: Tlz ) => "tlz" ,
134+ Self :: Legacy ( LegacySourceDistExtension :: Txz ) => "txz" ,
135+ Self :: Legacy ( LegacySourceDistExtension :: Zip ) => "zip" ,
119136 }
120137 }
138+
139+ /// Returns `true` if the extension conforms to [PEP 625](https://peps.python.org/pep-0625/)'s
140+ /// naming requirements.
141+ ///
142+ /// PEP 625 mandates `.tar.gz`; `.zip` is also accepted for backwards compatibility.
143+ pub fn is_pep625_compliant ( & self ) -> bool {
144+ matches ! (
145+ self ,
146+ Self :: TarGz | Self :: Legacy ( LegacySourceDistExtension :: Zip )
147+ )
148+ }
121149}
122150
123151impl Display for SourceDistExtension {
0 commit comments