Add explicit --pass-through flag and default to enabled for *cat (#3223)

Fixes #3211.

Adds the `--[no-]pass-through` flag which enables/disables pass-through mode.

* `zstdcat`, `zcat`, and `gzcat` default to `--pass-through`.
  Pass-through mode can be disabled by passing `--no-pass-through`.
* All other binaries default to not setting pass-through mode.
  However, we preserve the legacy behavior of enabling pass-through
  mode when writing to stdout with `-f` set, unless pass-through
  mode is explicitly disabled with `--no-pass-through`.

Adds a new test for this behavior that should codify the behavior we want.
This commit is contained in:
Nick Terrell
2022-08-04 17:15:59 -07:00
committed by GitHub
parent d0dcc9d775
commit 03cc84fddb
7 changed files with 125 additions and 5 deletions
+57
View File
@@ -0,0 +1,57 @@
#!/bin/sh
set -e
. "$COMMON/platform.sh"
echo "" > 1
echo "2" > 2
echo "23" > 3
echo "234" > 4
echo "some data" > file
println "+ passthrough enabled"
zstd file
# Test short files
zstd -dc --pass-through 1 2 3 4
# Test *cat symlinks
zstdcat file
"$ZSTD_SYMLINK_DIR/zcat" file
"$ZSTD_SYMLINK_DIR/gzcat" file
# Test multiple files with mix of compressed & not
zstdcat file file.zst
zstdcat file.zst file
# Test --pass-through
zstd -dc --pass-through file
zstd -d --pass-through file -o pass-through-file
# Test legacy implicit passthrough with -fc
zstd -dcf file
zstd -dcf file file.zst
zstd -df < file
zstd -dcf < file file.zst -
zstd -dcf < file.zst file -
$DIFF file pass-through-file
println "+ passthrough disabled"
# Test *cat
zstdcat --no-pass-through file && die "should fail"
"$ZSTD_SYMLINK_DIR/zcat" --no-pass-through file && die "should fail"
"$ZSTD_SYMLINK_DIR/gzcat" --no-pass-through file && die "should fail"
# Test zstd without implicit passthrough
zstd -d file -o no-pass-through-file && die "should fail"
zstd -d < file && die "should fail"
# Test legacy implicit passthrough with -fc
zstd --no-pass-through -dcf file && die "should fail"
zstd --no-pass-through -dcf file file.zst && die "should fail"
zstd --no-pass-through -df < file && die "should fail"
zstd --no-pass-through -dcf < file file.zst - && die "should fail"
zstd --no-pass-through -dcf < file.zst file - && die "should fail" ||:
@@ -0,0 +1,10 @@
zstd: file: unsupported format
zstd: file: unsupported format
zstd: file: unsupported format
zstd: file: unsupported format
zstd: /*stdin*\: unsupported format
zstd: file: unsupported format
zstd: file: unsupported format
zstd: /*stdin*\: unsupported format
zstd: /*stdin*\: unsupported format
zstd: file: unsupported format
@@ -0,0 +1,25 @@
+ passthrough enabled
2
23
234
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
some data
+ passthrough disabled
some data
some data
some data