zstd icon indicating copy to clipboard operation
zstd copied to clipboard

Unable to set log level to 2 when stderr isn't tty

Open Kawashima-Azumi opened this issue 3 years ago • 2 comments

Setting to other log levels do work. Only level=2 (the default) is broken. This breaks things like GNU parallel. Removing the following line make it work again:

diff -pru zstd-1.5.1.orig/programs/zstdcli.c zstd-1.5.1/programs/zstdcli.c
--- zstd-1.5.1.orig/programs/zstdcli.c<>2021-12-20 22:49:18.000000000 +0000
+++ zstd-1.5.1/programs/zstdcli.c<->2021-12-22 15:21:02.979589075 +0000
@@ -1402,8 +1402,6 @@ int main(int argCount, const char* argv[
     /* No status message in pipe mode (stdin - stdout) */
     hasStdout = outFileName && !strcmp(outFileName,stdoutmark);

-    if ((hasStdout || !IS_CONSOLE(stderr)) && (g_displayLevel==2)) g_displayLevel=1;
-
     /* IO Stream/File */
     FIO_setHasStdoutOutput(fCtx, hasStdout);
     FIO_setNbFilesTotal(fCtx, (int)filenames->tableSize);

No time to file a pull request. Sorry! Too busy at work.

BTW, stdio redirection doesn't necessarily mean to/from pipes. They (stdin, stdout, stderr) can also be regular files, but this is another bug that I have no time to report at present.

Kawashima-Azumi avatar Dec 22 '21 15:12 Kawashima-Azumi

I think this behavior is the intended one. But what is unclear to me is what you mean by "it breaks things". What exactly is broken ? Reducing verbosity level will only send less messages to display to stderr, but the compression or decompression operations are supposed to still work as intended. Do you have a more specific example which "breaks" ?

Cyan4973 avatar Jan 02 '22 16:01 Cyan4973

You can get around this issue by passing --progress to your zstd command.

I'll leave this issue open because it is a bit of a wart, but for all intents and purposes --progress will give you what you want.

terrelln avatar Dec 16 '22 00:12 terrelln