mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-05 02:55:31 +00:00
Remove Lzip because its incorrect, and improve extention comparison
This commit is contained in:
parent
9af1106144
commit
0660c2fe59
@ -71,7 +71,7 @@ ouch c file.txt file.zip
|
||||
|
||||
# Supported formats
|
||||
|
||||
| Format | `.tar` | `.zip` | `.bz`, `.bz2` | `.gz` | `.lz4` | `.xz`, `.lz`, `.lzma` | `.zst` |
|
||||
| Format | `.tar` | `.zip` | `.bz`, `.bz2` | `.gz` | `.lz4` | `.xz`, `.lzma` | `.zst` |
|
||||
|:---------:|:------:|:------:|:-------------:|:-----:|:------:|:---------------------:|:------:|
|
||||
| Supported | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
|
||||
|
@ -5,7 +5,7 @@ use std::{ffi::OsStr, fmt, path::Path};
|
||||
use self::CompressionFormat::*;
|
||||
|
||||
/// A wrapper around `CompressionFormat` that allows combinations like `tgz`
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, Eq)]
|
||||
#[non_exhaustive]
|
||||
pub struct Extension {
|
||||
/// One extension like "tgz" can be made of multiple CompressionFormats ([Tar, Gz])
|
||||
@ -13,6 +13,12 @@ pub struct Extension {
|
||||
/// The input text for this extension, like "tgz", "tar" or "xz"
|
||||
pub display_text: String,
|
||||
}
|
||||
// The display_text should be ignored when comparing extensions
|
||||
impl PartialEq for Extension {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.compression_formats == other.compression_formats
|
||||
}
|
||||
}
|
||||
|
||||
impl Extension {
|
||||
/// # Panics:
|
||||
@ -49,7 +55,7 @@ pub enum CompressionFormat {
|
||||
Bzip,
|
||||
/// .lz4
|
||||
Lz4,
|
||||
/// .xz .lzma .lz
|
||||
/// .xz .lzma
|
||||
Lzma,
|
||||
/// tar, tgz, tbz, tbz2, txz, tlz, tlz4, tlzma, tzst
|
||||
Tar,
|
||||
@ -121,7 +127,7 @@ pub fn separate_known_extensions_from_name(mut path: &Path) -> (&Path, Vec<Exten
|
||||
"bz" | "bz2" => &[Bzip],
|
||||
"gz" => &[Gzip],
|
||||
"lz4" => &[Lz4],
|
||||
"xz" | "lzma" | "lz" => &[Lzma],
|
||||
"xz" | "lzma" => &[Lzma],
|
||||
"zst" => &[Zstd],
|
||||
_ => break,
|
||||
};
|
||||
|
@ -75,12 +75,9 @@ pub fn try_infer_extension(path: &Path) -> Option<Extension> {
|
||||
fn is_bz2(buf: &[u8]) -> bool {
|
||||
buf.len() > 2 && buf[..=2] == [0x42, 0x5A, 0x68]
|
||||
}
|
||||
fn is_xz(buf: &[u8]) -> bool {
|
||||
fn is_lzma(buf: &[u8]) -> bool {
|
||||
buf.len() > 5 && buf[..=5] == [0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00]
|
||||
}
|
||||
fn is_lz(buf: &[u8]) -> bool {
|
||||
buf.len() > 3 && buf[..=3] == [0x4C, 0x5A, 0x49, 0x50]
|
||||
}
|
||||
fn is_lz4(buf: &[u8]) -> bool {
|
||||
buf.len() > 3 && buf[..=3] == [0x04, 0x22, 0x4D, 0x18]
|
||||
}
|
||||
@ -110,10 +107,8 @@ pub fn try_infer_extension(path: &Path) -> Option<Extension> {
|
||||
Some(Extension::new(&[Gzip], "gz"))
|
||||
} else if is_bz2(&buf) {
|
||||
Some(Extension::new(&[Bzip], "bz2"))
|
||||
} else if is_xz(&buf) {
|
||||
Some(Extension::new(&[Lzma], "xz"))
|
||||
} else if is_lz(&buf) {
|
||||
Some(Extension::new(&[Lzma], "lz"))
|
||||
} else if is_lzma(&buf) {
|
||||
Some(Extension::new(&[Lzma], "lzma")) // lzma can be `xz` or `lzma`
|
||||
} else if is_lz4(&buf) {
|
||||
Some(Extension::new(&[Lz4], "lz4"))
|
||||
} else if is_zst(&buf) {
|
||||
|
@ -34,7 +34,6 @@ enum FileExtension {
|
||||
Bz2,
|
||||
Gz,
|
||||
Lz4,
|
||||
Lz,
|
||||
Lzma,
|
||||
Xz,
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user