wp-cli / php-cli-tools

A collection of tools to help with PHP command line utilities
MIT License
673 stars 118 forks source link

sprintf(): Too few arguments #124

Open nahkampf opened 6 years ago

nahkampf commented 6 years ago

Can't really figure this one out. Sometimes (not often, but often enough to end up in my logs and irritate me) \cli\line() causes a warning: sprintf(): Too few arguments.

This is the offending line:

\cli\line("[%C%k%s%N] Starting!", date("Y-m-d H:i:s"));

Can't really see how the argument to sprintf() gets lost here, but obv it does.

environment: php5.6.33 (with mbstring) on debian, php-cli-tools v0.11.8.

Logfile trace:

in function LoggingErrorHandler::handleError
in function call_user_func in /foo/include/classes/LoggingErrorHandler.php on line 402
in function LoggingErrorHandler::{closure}
in function sprintf
in function call_user_func_array in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/Streams.php on line 48
in function cli\Streams::render
in function call_user_func_array in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/Streams.php on line 13
in function cli\Streams::_call in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/Streams.php on line 68
in function cli\Streams::out
in function call_user_func_array in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/Streams.php on line 13
in function cli\Streams::_call in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/Streams.php on line 95
in function cli\Streams::line
in function call_user_func_array in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/Streams.php on line 13
in function cli\Streams::_call in /foo/include/deps/wp-cli/php-cli-tools/lib/cli/cli.php on line 62
in function cli\line in /foo/bin/my_foobar_script.php on line 35
gitlost commented 6 years ago

Thanks for the report @nahkampf , yes, this is a bug introduced by me in https://github.com/wp-cli/php-cli-tools/pull/107 where Streams::render() no longer strips the color percent codes if Colors::shouldColorize() is not true, so sprintf() complains about them and (worse) doesn't output correctly.

This in turn was prompted by not wanting percent codes to be stripped when printing standard data.

So a bit of a mess really, and not sure there's a way to accommodate both issues.

A workaround is to just colorize oneself, eg

\cli\line(\cli\Colors::colorize("[%C%k%s%N] Starting!"), date("Y-m-d H:i:s"));

but this is obviously a bit yuck. Will consider the problem further to see if there's a solution...

nahkampf commented 6 years ago

Ah, thanks! Yucky workaround but I'll take it :)