Merge pull request #181 from qryxip/add-pkgfmt-tbz2

This commit is contained in:
Félix Saparelli 2022-06-23 06:37:02 +12:00 committed by GitHub
commit 0998439312
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 0 deletions

1
Cargo.lock generated
View file

@ -134,6 +134,7 @@ version = "0.9.1"
dependencies = [
"async-trait",
"bytes",
"bzip2",
"cargo_toml",
"clap 3.1.18",
"crates_io_api",

View file

@ -21,6 +21,7 @@ pkg-fmt = "zip"
[dependencies]
async-trait = "0.1.56"
bytes = "1.1.0"
bzip2 = { version = "0.4.3", features = ["static"] }
cargo_toml = "0.11.4"
clap = { version = "3.1.18", features = ["derive"] }
crates_io_api = { version = "0.8.0", default-features = false, features = ["rustls"] }

View file

@ -10,6 +10,8 @@ use strum_macros::{Display, EnumString, EnumVariantNames};
pub enum PkgFmt {
/// Download format is TAR (uncompressed)
Tar,
/// Download format is TAR + Bzip2
Tbz2,
/// Download format is TGZ (TAR + GZip)
Tgz,
/// Download format is TAR + XZ
@ -34,6 +36,7 @@ impl PkgFmt {
pub fn decompose(self) -> PkgFmtDecomposed {
match self {
PkgFmt::Tar => PkgFmtDecomposed::Tar(TarBasedFmt::Tar),
PkgFmt::Tbz2 => PkgFmtDecomposed::Tar(TarBasedFmt::Tbz2),
PkgFmt::Tgz => PkgFmtDecomposed::Tar(TarBasedFmt::Tgz),
PkgFmt::Txz => PkgFmtDecomposed::Tar(TarBasedFmt::Txz),
PkgFmt::Tzstd => PkgFmtDecomposed::Tar(TarBasedFmt::Tzstd),
@ -54,6 +57,8 @@ pub enum PkgFmtDecomposed {
pub enum TarBasedFmt {
/// Download format is TAR (uncompressed)
Tar,
/// Download format is TAR + Bzip2
Tbz2,
/// Download format is TGZ (TAR + GZip)
Tgz,
/// Download format is TAR + XZ
@ -66,6 +71,7 @@ impl From<TarBasedFmt> for PkgFmt {
fn from(fmt: TarBasedFmt) -> Self {
match fmt {
TarBasedFmt::Tar => PkgFmt::Tar,
TarBasedFmt::Tbz2 => PkgFmt::Tbz2,
TarBasedFmt::Tgz => PkgFmt::Tgz,
TarBasedFmt::Txz => PkgFmt::Txz,
TarBasedFmt::Tzstd => PkgFmt::Tzstd,

View file

@ -2,6 +2,7 @@ use std::fs::File;
use std::io::{self, BufRead, Read};
use std::path::Path;
use bzip2::bufread::BzDecoder;
use flate2::bufread::GzDecoder;
use log::debug;
use tar::Archive;
@ -19,6 +20,7 @@ pub(super) fn create_tar_decoder(
let r: Box<dyn Read> = match fmt {
Tar => Box::new(dat),
Tbz2 => Box::new(BzDecoder::new(dat)),
Tgz => Box::new(GzDecoder::new(dat)),
Txz => Box::new(XzDecoder::new(dat)),
Tzstd => {