Add PkgFmt::Tbz2

This commit is contained in:
Ryo Yamashita 2022-06-12 23:37:19 +09:00
parent 3b5ea35182
commit 1b9f8c0ffc
No known key found for this signature in database
GPG key ID: 72415AFBE13F8207
4 changed files with 10 additions and 0 deletions

1
Cargo.lock generated
View file

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

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 = "0.4.3"
cargo_metadata = "0.14.2" cargo_metadata = "0.14.2"
cargo_toml = "0.11.4" cargo_toml = "0.11.4"
clap = { version = "3.1.18", features = ["derive"] } clap = { version = "3.1.18", features = ["derive"] }

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 => {