diff --git a/CHANGELOG.md b/CHANGELOG.md index bd860458..5c22be35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ TBD === +Feature enhancements: + +* [FEATURE #1547](https://github.com/BurntSushi/ripgrep/pull/1547): + Support decompressing `.Z` files via `uncompress`. + Bug fixes: * [BUG #1252](https://github.com/BurntSushi/ripgrep/issues/1252): diff --git a/crates/cli/src/decompress.rs b/crates/cli/src/decompress.rs index c2b2738b..94e118b1 100644 --- a/crates/cli/src/decompress.rs +++ b/crates/cli/src/decompress.rs @@ -348,6 +348,7 @@ fn default_decompression_commands() -> Vec { const ARGS_LZMA: &[&str] = &["xz", "--format=lzma", "-d", "-c"]; const ARGS_BROTLI: &[&str] = &["brotli", "-d", "-c"]; const ARGS_ZSTD: &[&str] = &["zstd", "-q", "-d", "-c"]; + const ARGS_UNCOMPRESS: &[&str] = &["uncompress", "-c"]; fn cmd(glob: &str, args: &[&str]) -> DecompressionCommand { DecompressionCommand { @@ -372,5 +373,6 @@ fn default_decompression_commands() -> Vec { cmd("*.br", ARGS_BROTLI), cmd("*.zst", ARGS_ZSTD), cmd("*.zstd", ARGS_ZSTD), + cmd("*.Z", ARGS_UNCOMPRESS), ] } diff --git a/crates/ignore/src/default_types.rs b/crates/ignore/src/default_types.rs index 9136647a..fa83b3d7 100644 --- a/crates/ignore/src/default_types.rs +++ b/crates/ignore/src/default_types.rs @@ -234,6 +234,7 @@ pub const DEFAULT_TYPES: &[(&str, &[&str])] = &[ ("xz", &["*.xz", "*.txz"]), ("yacc", &["*.y"]), ("yaml", &["*.yaml", "*.yml"]), + ("z", &["*.Z"]), ("zig", &["*.zig"]), ("zsh", &[ ".zshenv", "zshenv", diff --git a/tests/data/sherlock.Z b/tests/data/sherlock.Z new file mode 100644 index 00000000..9ffa9283 Binary files /dev/null and b/tests/data/sherlock.Z differ diff --git a/tests/misc.rs b/tests/misc.rs index 16792a2b..9ec1107e 100644 --- a/tests/misc.rs +++ b/tests/misc.rs @@ -970,6 +970,21 @@ be, to a very large extent, the result of luck. Sherlock Holmes eqnice!(expected, cmd.stdout()); }); +rgtest!(compressed_uncompress, |dir: Dir, mut cmd: TestCommand| { + if !cmd_exists("uncompress") { + return; + } + + dir.create_bytes("sherlock.Z", include_bytes!("./data/sherlock.Z")); + cmd.arg("-z").arg("Sherlock").arg("sherlock.Z"); + + let expected = "\ + For the Doctor Watsons of this world, as opposed to the Sherlock +be, to a very large extent, the result of luck. Sherlock Holmes +"; + eqnice!(expected, cmd.stdout()); +}); + rgtest!(compressed_failing_gzip, |dir: Dir, mut cmd: TestCommand| { if !cmd_exists("gzip") { return;