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 = [ dependencies = [
"async-trait", "async-trait",
"bytes", "bytes",
"bzip2",
"cargo_toml", "cargo_toml",
"clap 3.1.18", "clap 3.1.18",
"crates_io_api", "crates_io_api",

View file

@ -21,6 +21,7 @@ pkg-fmt = "zip"
[dependencies] [dependencies]
async-trait = "0.1.56" async-trait = "0.1.56"
bytes = "1.1.0" bytes = "1.1.0"
bzip2 = { version = "0.4.3", features = ["static"] }
cargo_toml = "0.11.4" cargo_toml = "0.11.4"
clap = { version = "3.1.18", features = ["derive"] } clap = { version = "3.1.18", features = ["derive"] }
crates_io_api = { version = "0.8.0", default-features = false, features = ["rustls"] } 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 { pub enum PkgFmt {
/// Download format is TAR (uncompressed) /// Download format is TAR (uncompressed)
Tar, Tar,
/// Download format is TAR + Bzip2
Tbz2,
/// Download format is TGZ (TAR + GZip) /// Download format is TGZ (TAR + GZip)
Tgz, Tgz,
/// Download format is TAR + XZ /// Download format is TAR + XZ
@ -34,6 +36,7 @@ impl PkgFmt {
pub fn decompose(self) -> PkgFmtDecomposed { pub fn decompose(self) -> PkgFmtDecomposed {
match self { match self {
PkgFmt::Tar => PkgFmtDecomposed::Tar(TarBasedFmt::Tar), PkgFmt::Tar => PkgFmtDecomposed::Tar(TarBasedFmt::Tar),
PkgFmt::Tbz2 => PkgFmtDecomposed::Tar(TarBasedFmt::Tbz2),
PkgFmt::Tgz => PkgFmtDecomposed::Tar(TarBasedFmt::Tgz), PkgFmt::Tgz => PkgFmtDecomposed::Tar(TarBasedFmt::Tgz),
PkgFmt::Txz => PkgFmtDecomposed::Tar(TarBasedFmt::Txz), PkgFmt::Txz => PkgFmtDecomposed::Tar(TarBasedFmt::Txz),
PkgFmt::Tzstd => PkgFmtDecomposed::Tar(TarBasedFmt::Tzstd), PkgFmt::Tzstd => PkgFmtDecomposed::Tar(TarBasedFmt::Tzstd),
@ -54,6 +57,8 @@ pub enum PkgFmtDecomposed {
pub enum TarBasedFmt { pub enum TarBasedFmt {
/// Download format is TAR (uncompressed) /// Download format is TAR (uncompressed)
Tar, Tar,
/// Download format is TAR + Bzip2
Tbz2,
/// Download format is TGZ (TAR + GZip) /// Download format is TGZ (TAR + GZip)
Tgz, Tgz,
/// Download format is TAR + XZ /// Download format is TAR + XZ
@ -66,6 +71,7 @@ impl From<TarBasedFmt> for PkgFmt {
fn from(fmt: TarBasedFmt) -> Self { fn from(fmt: TarBasedFmt) -> Self {
match fmt { match fmt {
TarBasedFmt::Tar => PkgFmt::Tar, TarBasedFmt::Tar => PkgFmt::Tar,
TarBasedFmt::Tbz2 => PkgFmt::Tbz2,
TarBasedFmt::Tgz => PkgFmt::Tgz, TarBasedFmt::Tgz => PkgFmt::Tgz,
TarBasedFmt::Txz => PkgFmt::Txz, TarBasedFmt::Txz => PkgFmt::Txz,
TarBasedFmt::Tzstd => PkgFmt::Tzstd, TarBasedFmt::Tzstd => PkgFmt::Tzstd,

View file

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