mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-07 12:05:46 +00:00
Merge pull request #173 from figsoda/lzzzz
switch from lz4_flex to lzzzz, enable lz4 tests
This commit is contained in:
commit
85a44c0835
36
Cargo.lock
generated
36
Cargo.lock
generated
@ -337,15 +337,6 @@ version = "0.5.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
|
checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lz4_flex"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "177c079243f6867429aca5af5053747f57e329d44f0c58bebca078cd14873ec2"
|
|
||||||
dependencies = [
|
|
||||||
"twox-hash",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lzma-sys"
|
name = "lzma-sys"
|
||||||
version = "0.1.17"
|
version = "0.1.17"
|
||||||
@ -357,6 +348,15 @@ dependencies = [
|
|||||||
"pkg-config",
|
"pkg-config",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lzzzz"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f6d891cedd3b1659c206a60ff8afd15bccd7c2754b157f8a164861989e042b88"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
@ -411,7 +411,7 @@ dependencies = [
|
|||||||
"infer",
|
"infer",
|
||||||
"libc",
|
"libc",
|
||||||
"linked-hash-map",
|
"linked-hash-map",
|
||||||
"lz4_flex",
|
"lzzzz",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parse-display",
|
"parse-display",
|
||||||
"proptest",
|
"proptest",
|
||||||
@ -675,12 +675,6 @@ dependencies = [
|
|||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "static_assertions"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
@ -802,16 +796,6 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "twox-hash"
|
|
||||||
version = "1.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1f559b464de2e2bdabcac6a210d12e9b5a5973c251e102c44c585c71d51bd78e"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"static_assertions",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicase"
|
name = "unicase"
|
||||||
version = "2.6.0"
|
version = "2.6.0"
|
||||||
|
@ -21,7 +21,7 @@ walkdir = "2.3.2"
|
|||||||
bzip2 = "0.4.3"
|
bzip2 = "0.4.3"
|
||||||
libc = "0.2.103"
|
libc = "0.2.103"
|
||||||
tar = "0.4.37"
|
tar = "0.4.37"
|
||||||
lz4_flex = "0.9.0"
|
lzzzz = "0.8.0"
|
||||||
xz2 = "0.1.6"
|
xz2 = "0.1.6"
|
||||||
zip = { version = "0.5.13", default-features = false, features = ["deflate-miniz"] }
|
zip = { version = "0.5.13", default-features = false, features = ["deflate-miniz"] }
|
||||||
flate2 = { version = "1.0.22", default-features = false, features = ["zlib"] }
|
flate2 = { version = "1.0.22", default-features = false, features = ["zlib"] }
|
||||||
|
@ -253,11 +253,11 @@ fn compress_files(files: Vec<PathBuf>, formats: Vec<Extension>, output_file: fs:
|
|||||||
let mut writer: Box<dyn Write> = Box::new(file_writer);
|
let mut writer: Box<dyn Write> = Box::new(file_writer);
|
||||||
|
|
||||||
// Grab previous encoder and wrap it inside of a new one
|
// Grab previous encoder and wrap it inside of a new one
|
||||||
let chain_writer_encoder = |format: &CompressionFormat, encoder: Box<dyn Write>| {
|
let chain_writer_encoder = |format: &CompressionFormat, encoder: Box<dyn Write>| -> crate::Result<Box<dyn Write>> {
|
||||||
let encoder: Box<dyn Write> = match format {
|
let encoder: Box<dyn Write> = match format {
|
||||||
Gzip => Box::new(flate2::write::GzEncoder::new(encoder, Default::default())),
|
Gzip => Box::new(flate2::write::GzEncoder::new(encoder, Default::default())),
|
||||||
Bzip => Box::new(bzip2::write::BzEncoder::new(encoder, Default::default())),
|
Bzip => Box::new(bzip2::write::BzEncoder::new(encoder, Default::default())),
|
||||||
Lz4 => Box::new(lz4_flex::frame::FrameEncoder::new(encoder)),
|
Lz4 => Box::new(lzzzz::lz4f::WriteCompressor::new(encoder, Default::default())?),
|
||||||
Lzma => Box::new(xz2::write::XzEncoder::new(encoder, 6)),
|
Lzma => Box::new(xz2::write::XzEncoder::new(encoder, 6)),
|
||||||
Zstd => {
|
Zstd => {
|
||||||
let zstd_encoder = zstd::stream::write::Encoder::new(encoder, Default::default());
|
let zstd_encoder = zstd::stream::write::Encoder::new(encoder, Default::default());
|
||||||
@ -268,16 +268,16 @@ fn compress_files(files: Vec<PathBuf>, formats: Vec<Extension>, output_file: fs:
|
|||||||
}
|
}
|
||||||
Tar | Zip => unreachable!(),
|
Tar | Zip => unreachable!(),
|
||||||
};
|
};
|
||||||
encoder
|
Ok(encoder)
|
||||||
};
|
};
|
||||||
|
|
||||||
for format in formats.iter().flat_map(Extension::iter).skip(1).collect::<Vec<_>>().iter().rev() {
|
for format in formats.iter().flat_map(Extension::iter).skip(1).collect::<Vec<_>>().iter().rev() {
|
||||||
writer = chain_writer_encoder(format, writer);
|
writer = chain_writer_encoder(format, writer)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match formats[0].compression_formats[0] {
|
match formats[0].compression_formats[0] {
|
||||||
Gzip | Bzip | Lz4 | Lzma | Zstd => {
|
Gzip | Bzip | Lz4 | Lzma | Zstd => {
|
||||||
writer = chain_writer_encoder(&formats[0].compression_formats[0], writer);
|
writer = chain_writer_encoder(&formats[0].compression_formats[0], writer)?;
|
||||||
let mut reader = fs::File::open(&files[0]).unwrap();
|
let mut reader = fs::File::open(&files[0]).unwrap();
|
||||||
io::copy(&mut reader, &mut writer)?;
|
io::copy(&mut reader, &mut writer)?;
|
||||||
}
|
}
|
||||||
@ -352,7 +352,7 @@ fn decompress_file(
|
|||||||
let decoder: Box<dyn Read> = match format {
|
let decoder: Box<dyn Read> = match format {
|
||||||
Gzip => Box::new(flate2::read::GzDecoder::new(decoder)),
|
Gzip => Box::new(flate2::read::GzDecoder::new(decoder)),
|
||||||
Bzip => Box::new(bzip2::read::BzDecoder::new(decoder)),
|
Bzip => Box::new(bzip2::read::BzDecoder::new(decoder)),
|
||||||
Lz4 => Box::new(lz4_flex::frame::FrameDecoder::new(decoder)),
|
Lz4 => Box::new(lzzzz::lz4f::ReadDecompressor::new(decoder)?),
|
||||||
Lzma => Box::new(xz2::read::XzDecoder::new(decoder)),
|
Lzma => Box::new(xz2::read::XzDecoder::new(decoder)),
|
||||||
Zstd => Box::new(zstd::stream::Decoder::new(decoder)?),
|
Zstd => Box::new(zstd::stream::Decoder::new(decoder)?),
|
||||||
Tar | Zip => unreachable!(),
|
Tar | Zip => unreachable!(),
|
||||||
@ -440,7 +440,7 @@ fn list_archive_contents(
|
|||||||
let decoder: Box<dyn Read> = match format {
|
let decoder: Box<dyn Read> = match format {
|
||||||
Gzip => Box::new(flate2::read::GzDecoder::new(decoder)),
|
Gzip => Box::new(flate2::read::GzDecoder::new(decoder)),
|
||||||
Bzip => Box::new(bzip2::read::BzDecoder::new(decoder)),
|
Bzip => Box::new(bzip2::read::BzDecoder::new(decoder)),
|
||||||
Lz4 => Box::new(lz4_flex::frame::FrameDecoder::new(decoder)),
|
Lz4 => Box::new(lzzzz::lz4f::ReadDecompressor::new(decoder)?),
|
||||||
Lzma => Box::new(xz2::read::XzDecoder::new(decoder)),
|
Lzma => Box::new(xz2::read::XzDecoder::new(decoder)),
|
||||||
Zstd => Box::new(zstd::stream::Decoder::new(decoder)?),
|
Zstd => Box::new(zstd::stream::Decoder::new(decoder)?),
|
||||||
Tar | Zip => unreachable!(),
|
Tar | Zip => unreachable!(),
|
||||||
|
@ -12,6 +12,8 @@ use crate::utils::colors::*;
|
|||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// Not every IoError, some of them get filtered by `From<io::Error>` into other variants
|
/// Not every IoError, some of them get filtered by `From<io::Error>` into other variants
|
||||||
IoError { reason: String },
|
IoError { reason: String },
|
||||||
|
/// From lzzzz::lz4f::Error
|
||||||
|
Lz4Error { reason: String },
|
||||||
/// Detected from io::Error if .kind() is io::ErrorKind::NotFound
|
/// Detected from io::Error if .kind() is io::ErrorKind::NotFound
|
||||||
NotFound { error_title: String },
|
NotFound { error_title: String },
|
||||||
/// NEEDS MORE CONTEXT
|
/// NEEDS MORE CONTEXT
|
||||||
@ -97,6 +99,7 @@ impl fmt::Display for Error {
|
|||||||
.hint("Use a more appropriate tool for this, such as rsync.")
|
.hint("Use a more appropriate tool for this, such as rsync.")
|
||||||
}
|
}
|
||||||
Error::IoError { reason } => FinalError::with_title(reason),
|
Error::IoError { reason } => FinalError::with_title(reason),
|
||||||
|
Error::Lz4Error { reason } => FinalError::with_title(reason),
|
||||||
Error::AlreadyExists { error_title } => FinalError::with_title(error_title).detail("File already exists"),
|
Error::AlreadyExists { error_title } => FinalError::with_title(error_title).detail("File already exists"),
|
||||||
Error::InvalidZipArchive(reason) => FinalError::with_title("Invalid zip archive").detail(reason),
|
Error::InvalidZipArchive(reason) => FinalError::with_title("Invalid zip archive").detail(reason),
|
||||||
Error::PermissionDenied { error_title } => FinalError::with_title(error_title).detail("Permission denied"),
|
Error::PermissionDenied { error_title } => FinalError::with_title(error_title).detail("Permission denied"),
|
||||||
@ -119,6 +122,12 @@ impl From<std::io::Error> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<lzzzz::lz4f::Error> for Error {
|
||||||
|
fn from(err: lzzzz::lz4f::Error) -> Self {
|
||||||
|
Self::Lz4Error { reason: err.to_string() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<zip::result::ZipError> for Error {
|
impl From<zip::result::ZipError> for Error {
|
||||||
fn from(err: zip::result::ZipError) -> Self {
|
fn from(err: zip::result::ZipError) -> Self {
|
||||||
use zip::result::ZipError;
|
use zip::result::ZipError;
|
||||||
|
@ -33,7 +33,7 @@ enum FileExtension {
|
|||||||
Bz,
|
Bz,
|
||||||
Bz2,
|
Bz2,
|
||||||
Gz,
|
Gz,
|
||||||
// Lz4, // broken
|
Lz4,
|
||||||
Lz,
|
Lz,
|
||||||
Lzma,
|
Lzma,
|
||||||
Xz,
|
Xz,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user