diff --git a/grep-cli/src/decompress.rs b/grep-cli/src/decompress.rs index ad108ea0..e53d2a59 100644 --- a/grep-cli/src/decompress.rs +++ b/grep-cli/src/decompress.rs @@ -352,6 +352,8 @@ fn default_decompression_commands() -> Vec { const ARGS_XZ: &[&str] = &["xz", "-d", "-c"]; const ARGS_LZ4: &[&str] = &["lz4", "-d", "-c"]; const ARGS_LZMA: &[&str] = &["xz", "--format=lzma", "-d", "-c"]; + const ARGS_BROTLI: &[&str] = &["brotli", "-d", "-c"]; + const ARGS_ZSTD: &[&str] = &["zstd", "-q", "-d", "-c"]; fn cmd(glob: &str, args: &[&str]) -> DecompressionCommand { DecompressionCommand { @@ -367,15 +369,14 @@ fn default_decompression_commands() -> Vec { vec![ cmd("*.gz", ARGS_GZIP), cmd("*.tgz", ARGS_GZIP), - cmd("*.bz2", ARGS_BZIP), cmd("*.tbz2", ARGS_BZIP), - cmd("*.xz", ARGS_XZ), cmd("*.txz", ARGS_XZ), - cmd("*.lz4", ARGS_LZ4), - cmd("*.lzma", ARGS_LZMA), + cmd("*.br", ARGS_BROTLI), + cmd("*.zst", ARGS_ZSTD), + cmd("*.zstd", ARGS_ZSTD), ] } diff --git a/src/app.rs b/src/app.rs index 037feec3..8639262f 100644 --- a/src/app.rs +++ b/src/app.rs @@ -2021,9 +2021,9 @@ This flag can be used with the -o/--only-matching flag. fn flag_search_zip(args: &mut Vec) { const SHORT: &str = "Search in compressed files."; const LONG: &str = long!("\ -Search in compressed files. Currently gz, bz2, xz, lzma and lz4 files are -supported. This option expects the decompression binaries to be available in -your PATH. +Search in compressed files. Currently gzip, bzip2, xz, LZ4, LZMA, Brotli and +Zstd files are supported. This option expects the decompression binaries to be +available in your PATH. This flag can be disabled with --no-search-zip. "); diff --git a/tests/data/sherlock.br b/tests/data/sherlock.br new file mode 100644 index 00000000..7d0a9613 --- /dev/null +++ b/tests/data/sherlock.br @@ -0,0 +1,2 @@ +n-_. cMY4Ya -LO(8sn^Gwш!, +KD/7th ]jE_;drFQs/:DIVB}T7ѵH2)M[ui50ڮY6%ר_U by4Ϡ!&g# \ No newline at end of file diff --git a/tests/data/sherlock.zst b/tests/data/sherlock.zst new file mode 100644 index 00000000..c649ac9b Binary files /dev/null and b/tests/data/sherlock.zst differ diff --git a/tests/misc.rs b/tests/misc.rs index 31662871..b4e620c5 100644 --- a/tests/misc.rs +++ b/tests/misc.rs @@ -909,6 +909,36 @@ be, to a very large extent, the result of luck. Sherlock Holmes eqnice!(expected, cmd.stdout()); }); +rgtest!(compressed_brotli, |dir: Dir, mut cmd: TestCommand| { + if !cmd_exists("brotli") { + return; + } + + dir.create_bytes("sherlock.br", include_bytes!("./data/sherlock.br")); + cmd.arg("-z").arg("Sherlock").arg("sherlock.br"); + + 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_zstd, |dir: Dir, mut cmd: TestCommand| { + if !cmd_exists("zstd") { + return; + } + + dir.create_bytes("sherlock.zst", include_bytes!("./data/sherlock.zst")); + cmd.arg("-z").arg("Sherlock").arg("sherlock.zst"); + + 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;