summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWieland Hoffmann <themineo@gmail.com>2020-04-10 11:19:25 +0200
committerAndrew Gallant <jamslam@gmail.com>2020-05-08 23:24:40 -0400
commitdf7a3bfc7fe30f3e9e89d8775748b1239c5b5fc4 (patch)
treea5ffa8a165feb657aebfc5bf8dde92f2be984fb3
parent28f2a93caefef8018c786c80c9b47f13f62c01c3 (diff)
grep-cli: support files compressed by compress(1)
While Linux distributions (at least Arch Linux, RHEL, Debian) do not support compressing files with compress(1), macOS & AIX do (the utility is part of POSIX). Additionally, gzip is able to uncompress such compressed files and provides an `uncompress` binary. Closes #1547
-rw-r--r--CHANGELOG.md5
-rw-r--r--crates/cli/src/decompress.rs2
-rw-r--r--crates/ignore/src/default_types.rs1
-rw-r--r--tests/data/sherlock.Zbin0 -> 286 bytes
-rw-r--r--tests/misc.rs15
5 files changed, 23 insertions, 0 deletions
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<DecompressionCommand> {
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<DecompressionCommand> {
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
--- /dev/null
+++ b/tests/data/sherlock.Z
Binary files 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;