From feb7956bb014af6491e9e61f1f5b62eb9fd0145c Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Mon, 6 Apr 2020 17:23:18 +1000 Subject: [PATCH 1/8] Added helpers-exceptions-readabletrace package --- composer.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 63ec837..e61fcd0 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,8 @@ "pointybeard/helpers-functions-strings": "~1.1", "pointybeard/helpers-functions-flags": "~1.0", "pointybeard/helpers-functions-arrays": "~1.0", - "pointybeard/helpers-functions-debug": "~1.0" + "pointybeard/helpers-functions-debug": "~1.0", + "pointybeard/helpers-exceptions-readabletrace": "~1.0.0" }, "support": { "issues": "https://github.com/pointybeard/helpers-functions-cli/issues", @@ -26,6 +27,9 @@ }, "minimum-stability": "stable", "autoload": { + "psr-4": { + "pointybeard\\Helpers\\Functions\\": "src/" + }, "files": [ "src/Cli/Cli.php" ] From 3ccfe2477fce7af92b1a942d539d8876d35ddf13 Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Mon, 6 Apr 2020 17:23:44 +1000 Subject: [PATCH 2/8] Added run_command() function and RunCommandFailedException exception --- src/Cli/Cli.php | 51 +++++++++++++++++++ .../Exceptions/RunCommandFailedException.php | 30 +++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/Cli/Exceptions/RunCommandFailedException.php diff --git a/src/Cli/Cli.php b/src/Cli/Cli.php index f9d760b..7b7231f 100644 --- a/src/Cli/Cli.php +++ b/src/Cli/Cli.php @@ -210,3 +210,54 @@ if (!function_exists(__NAMESPACE__."\display_error_and_exit")) { exit(1); } } + +/* + * Uses proc_open() to run a command on the shell. Output and errors are captured + * and returned. If the command "fails" to run (i.e. return code is != 0), this + * function will throw an exception. + * + * Note that some commands will return a non-zero status code to signify, for + * example, no results found. This function is unable to tell the difference and + * will trigger an exception regardless. In this instance, It is advised to trap + * that exception and inspect both $stderr and $stdout to decide if it was + * actually due to failed command execution. + * + * @param string $command the full bash command to run + * @param string $stdout (optional) reference to capture output from STDOUT + * @param string $stderr (optional) reference to capture output from STDERR + * + * @throws RunCommandFailedException + */ +if (!function_exists(__NAMESPACE__.'\run_command')) { + function run_command(string $command, string &$stdout = null, string &$stderr = null): void + { + $pipes = null; + $return = null; + + $proc = proc_open( + $command, + [ + ['pipe', 'r'], // STDIN + ['pipe', 'w'], // STDOUT + ['pipe', 'w'], // STDERR + ], + $pipes, + getcwd(), + null + ); + + if (true == is_resource($proc)) { + $stdout = trim(stream_get_contents($pipes[1])); + $stderr = trim(stream_get_contents($pipes[2])); + + // Check the return code. If it's not 0, then the command failed. + if (0 != proc_close($proc)) { + throw new Exceptions\RunCommandFailedException($command, (string) $stderr); + } + } else { + // Something went horribly wrong with proc_open(). This should + // nearly never happen, but, accounting for it regardless. + throw new Exceptions\RunCommandFailedException($command, 'proc_open() returned FALSE'); + } + } +} diff --git a/src/Cli/Exceptions/RunCommandFailedException.php b/src/Cli/Exceptions/RunCommandFailedException.php new file mode 100644 index 0000000..492900f --- /dev/null +++ b/src/Cli/Exceptions/RunCommandFailedException.php @@ -0,0 +1,30 @@ +command = $command; + $this->error = $error; + parent::__construct("Failed to run command. Returned: {$error}", $code, $previous); + } + + public function getCommand(): string + { + return $this->command; + } + + public function getError(): string + { + return $this->error; + } +} From 593410a68b851470c2d02a7d47ce94911da9caff Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Mon, 6 Apr 2020 17:24:04 +1000 Subject: [PATCH 3/8] Updated README, CHANGELOG, and LICENCE for 1.1.9 release --- CHANGELOG.md | 7 +++++++ LICENCE | 2 +- README.md | 21 +++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d875479..12fd545 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [1.1.9][] +#### Added +- Added `run_command()` function +- Added `RunCommandFailedException` exception +- Added `pointybeard/helpers-exceptions-readabletrace` package + ## [1.1.8][] #### Changed - Updated `manpage()` to work with `pointybeard/helpers-cli-input` 1.2 @@ -53,6 +59,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). #### Added - Initial release +[1.1.9]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.8...1.1.9 [1.1.8]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.7...1.1.8 [1.1.7]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.6...1.1.7 [1.1.6]: https://github.com/pointybeard/helpers-functions-cli/compare/1.1.5...1.1.6 diff --git a/LICENCE b/LICENCE index 7d77cd1..cb582d5 100644 --- a/LICENCE +++ b/LICENCE @@ -3,7 +3,7 @@ unless otherwise specified, released under the MIT licence as follows: ----- begin license block ----- -Copyright 2019 Alannah Kearney +Copyright 2019-2020 Alannah Kearney Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 3b79609..bf596c6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # PHP Helpers: Command-line Functions -- Version: v1.1.8 -- Date: June 01 2019 +- Version: v1.1.9 +- Date: April 06 2020 - [Release notes](https://github.com/pointybeard/helpers-functions-cli/blob/master/CHANGELOG.md) - [GitHub repository](https://github.com/pointybeard/helpers-functions-cli) @@ -30,6 +30,7 @@ The following functions are provided: - `can_invoke_bash()` - `is_su()` +- `run_command()` - `usage()` - `manpage()` - `get_window_size()` @@ -59,6 +60,19 @@ var_dump(Cli\get_window_size()); // 'lines' => string(2) "68" // } +Cli\run_command("date", $out); +var_dump($out); +// string(29) "Mon 6 Apr 17:20:29 AEST 2020" + +try{ + Cli\run_command("not -a --command", $out, $err); +} catch(Cli\Exceptions\RunCommandFailedException $ex) { + var_dump($ex->getMessage(), $ex->getCommand(), $ex->getError()); +} +// string(54) "Failed to run command. Returned: sh: 1: not: not found" +// string(16) "not -a --command" +// string(21) "sh: 1: not: not found" + echo Cli\manpage( 'test', '1.0.2', @@ -128,8 +142,7 @@ Cli\display_error_and_exit('Looks like something went wrong!', 'Fatal Error'); ## Support -If you believe you have found a bug, please report it using the [GitHub issue tracker](https://github.com/pointybeard/helpers-functions-cli/issues), -or better yet, fork the library and submit a pull request. +If you believe you have found a bug, please report it using the [GitHub issue tracker](https://github.com/pointybeard/helpers-functions-cli/issues), or better yet, fork the library and submit a pull request. ## Contributing From 630efc99d6b7cb6df8333cf0b569c6d4c2bf16d6 Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Sat, 11 Apr 2020 18:51:09 +1000 Subject: [PATCH 4/8] Fixed call to implode() in display_error_and_exit() to avoid deprecation warning. --- src/Cli/Cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/Cli.php b/src/Cli/Cli.php index 7b7231f..dfa54fd 100644 --- a/src/Cli/Cli.php +++ b/src/Cli/Cli.php @@ -201,7 +201,7 @@ if (!function_exists(__NAMESPACE__."\display_error_and_exit")) { "\r\n%s\r\n%s\r\n%s\r\n%s", $emptyLine, $add_background($heading, true), - implode($message, PHP_EOL), + implode(PHP_EOL, $message), !empty($trace) && count($trace) > 0 ? PHP_EOL.sprintf("Trace\r\n==========\r\n%s\r\n", Debug\readable_debug_backtrace($trace)) : '' From 33090aee1fa40cd5af916b89b922b3a17c038851 Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Thu, 29 Jul 2021 14:36:51 +1000 Subject: [PATCH 5/8] feat: Add which() method and refactor run_command() --- src/Cli/Cli.php | 160 +++++++++++++++++++++++++++++++----------------- 1 file changed, 105 insertions(+), 55 deletions(-) diff --git a/src/Cli/Cli.php b/src/Cli/Cli.php index dfa54fd..86dc180 100644 --- a/src/Cli/Cli.php +++ b/src/Cli/Cli.php @@ -2,14 +2,115 @@ declare(strict_types=1); +/* + * This file is part of the "PHP Helpers: Command-line Functions" repository. + * + * Copyright 2019-2021 Alannah Kearney + * + * For the full copyright and license information, please view the LICENCE + * file that was distributed with this source code. + */ + namespace pointybeard\Helpers\Functions\Cli; -use pointybeard\Helpers\Cli\Input; use pointybeard\Helpers\Cli\Colour; -use pointybeard\Helpers\Functions\Flags; -use pointybeard\Helpers\Functions\Strings; +use pointybeard\Helpers\Cli\Input; use pointybeard\Helpers\Functions\Arrays; use pointybeard\Helpers\Functions\Debug; +use pointybeard\Helpers\Functions\Flags; +use pointybeard\Helpers\Functions\Strings; + +/* + * Uses proc_open() to run a command on the shell. Output and errors are captured + * and returned. If the command "fails" to run (i.e. return code is != 0), this + * function will throw an exception. + * + * Note that some commands will return a non-zero status code to signify, for + * example, no results found. This function is unable to tell the difference and + * will trigger an exception regardless. In this instance, It is advised to trap + * that exception and inspect both $stderr and $stdout to decide if it was + * actually due to failed command execution. + * + * @param string $command the full bash command to run + * @param string $stdout (optional) reference to capture output from STDOUT + * @param string $stderr (optional) reference to capture output from STDERR + * #param string $exitCode (options) reference to capture the command exit code + * + * @throws RunCommandFailedException + */ +if (!function_exists(__NAMESPACE__.'\run_command')) { + function run_command(string $command, string &$stdout = null, string &$stderr = null, int &$exitCode = null): void + { + $pipes = null; + $exitCode = null; + + $proc = proc_open( + "{$command};echo $? >&3", + [ + 0 => ['pipe', 'r'], // STDIN + 1 => ['pipe', 'w'], // STDOUT + 2 => ['pipe', 'w'], // STDERR + 3 => ['pipe', 'w'], // Used to capture the exit code + ], + $pipes, + getcwd(), + null + ); + + // Close STDIN stream + fclose($pipes[0]); + + // (guard) proc_open failed to return a resource + if (false == is_resource($proc)) { + throw new Exceptions\RunCommandFailedException($command, 'proc_open() returned FALSE.'); + } + + // Get contents of STDOUT and close stream + $stdout = trim(stream_get_contents($pipes[1])); + fclose($pipes[1]); + + // Get contents od STDERR and close stream + $stderr = trim(stream_get_contents($pipes[2])); + fclose($pipes[2]); + + // Grab the exit code then close the stream + if (false == feof($pipes[3])) { + $exitCode = (int) trim(stream_get_contents($pipes[3])); + } + fclose($pipes[3]); + + // Close the process we created + proc_close($proc); + + // (guard) proc_close return indiciated a failure + if (0 != $exitCode) { + // There was some kind of error. Throw an exception. + // If STDERR is empty, in effort to give back something + // meaningful, grab contents of STDOUT instead + throw new Exceptions\RunCommandFailedException($command, true == empty(trim($stderr)) ? $stdout : $stderr); + } + } +} + +/* + * Returns the pathname for a specified command (or null if it cannot be found) + * + * @params $command the name of the command to look for + * + * @returns string|null + */ +if (!function_exists(__NAMESPACE__.'\which')) { + function which(string $command): ?string + { + try { + run_command("which {$command}", $output); + } catch (Exception $ex) { + $output = null; + } + + return $output; + } +} /* * Checks if bash can be invoked. @@ -144,7 +245,7 @@ if (!function_exists(__NAMESPACE__."\display_error_and_exit")) { $edgePadding = str_repeat($padCharacter, $edgePaddingLength); // Convenience function for adding the background to a line. - $add_background = function (string $string, bool $bold = false) use ($padCharacter, $edgePadding, $background): string { + $add_background = function (string $string, bool $bold = false) use ($edgePadding, $background): string { $string = $edgePadding.$string.$edgePadding; return Colour\Colour::colourise( @@ -210,54 +311,3 @@ if (!function_exists(__NAMESPACE__."\display_error_and_exit")) { exit(1); } } - -/* - * Uses proc_open() to run a command on the shell. Output and errors are captured - * and returned. If the command "fails" to run (i.e. return code is != 0), this - * function will throw an exception. - * - * Note that some commands will return a non-zero status code to signify, for - * example, no results found. This function is unable to tell the difference and - * will trigger an exception regardless. In this instance, It is advised to trap - * that exception and inspect both $stderr and $stdout to decide if it was - * actually due to failed command execution. - * - * @param string $command the full bash command to run - * @param string $stdout (optional) reference to capture output from STDOUT - * @param string $stderr (optional) reference to capture output from STDERR - * - * @throws RunCommandFailedException - */ -if (!function_exists(__NAMESPACE__.'\run_command')) { - function run_command(string $command, string &$stdout = null, string &$stderr = null): void - { - $pipes = null; - $return = null; - - $proc = proc_open( - $command, - [ - ['pipe', 'r'], // STDIN - ['pipe', 'w'], // STDOUT - ['pipe', 'w'], // STDERR - ], - $pipes, - getcwd(), - null - ); - - if (true == is_resource($proc)) { - $stdout = trim(stream_get_contents($pipes[1])); - $stderr = trim(stream_get_contents($pipes[2])); - - // Check the return code. If it's not 0, then the command failed. - if (0 != proc_close($proc)) { - throw new Exceptions\RunCommandFailedException($command, (string) $stderr); - } - } else { - // Something went horribly wrong with proc_open(). This should - // nearly never happen, but, accounting for it regardless. - throw new Exceptions\RunCommandFailedException($command, 'proc_open() returned FALSE'); - } - } -} From b9a3034788e0083afe66c85d6d1978798799964e Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Thu, 29 Jul 2021 14:37:32 +1000 Subject: [PATCH 6/8] chore: Update README, LICENCE, and add code linting --- .gitattributes | 2 + .php-commitizen.php | 41 +++++++++++++ .php-cs-fixer.dist.php | 59 +++++++++++++++++++ CHANGELOG.md | 7 +++ LICENCE | 2 +- README.md | 9 ++- composer.json | 22 +++++-- .../Exceptions/RunCommandFailedException.php | 10 ++++ 8 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 .gitattributes create mode 100644 .php-commitizen.php create mode 100644 .php-cs-fixer.dist.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a3aa700 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Force LF +* text eol=lf diff --git a/.php-commitizen.php b/.php-commitizen.php new file mode 100644 index 0000000..8c77023 --- /dev/null +++ b/.php-commitizen.php @@ -0,0 +1,41 @@ + [ + 'lengthMin' => 3, + 'lengthMax' => 8, + 'acceptExtra' => false, + 'values' => [ + 'feat', + 'fix', + 'docs', + 'chore', + 'test', + 'refactor', + 'revert', + 'ci', + ] + ], + 'scope' => [ + 'lengthMin' => 0, + 'lengthMax' => 10, + 'acceptExtra' => true, + 'values' => [], + ], + 'description' => [ + 'lengthMin' => 1, + 'lengthMax' => 47, + ], + 'subject' => [ + 'lengthMin' => 1, + 'lengthMax' => 69, + ], + 'body' => [ + 'wrap' => 72, + ], + 'footer' => [ + 'wrap' => 72, + ], +]; diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..563c415 --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,59 @@ + + +For the full copyright and license information, please view the LICENCE +file that was distributed with this source code. +EOF; + +return (new PhpCsFixer\Config()) + ->setUsingCache(true) + ->setRiskyAllowed(true) + ->setFinder( + (new PhpCsFixer\Finder()) + ->files() + ->name('*.php') + ->in(__DIR__) + ->exclude(__DIR__.'/vendor') + ) + ->setRules([ + '@PSR2' => true, + '@Symfony' => true, + 'is_null' => true, + 'blank_line_before_statement' => ['statements' => ['continue', 'declare', 'return', 'throw', 'try']], + 'cast_spaces' => ['space' => 'single'], + 'header_comment' => ['header' => $header], + 'include' => true, + 'class_attributes_separation' => ['elements' => ['const' => 'one', 'method' => 'one', 'property' => 'one']], + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_unused_imports' => true, + 'no_whitespace_in_blank_line' => true, + 'object_operator_without_whitespace' => true, + 'phpdoc_align' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_package' => true, + 'phpdoc_order' => true, + 'phpdoc_scalar' => true, + 'phpdoc_trim' => true, + 'phpdoc_types' => true, + 'psr_autoloading' => true, + 'array_syntax' => ['syntax' => 'short'], + 'declare_strict_types' => true, + 'single_blank_line_before_namespace' => true, + 'standardize_not_equals' => true, + 'ternary_operator_spaces' => true, + 'trailing_comma_in_multiline' => true, + ]) +; diff --git a/CHANGELOG.md b/CHANGELOG.md index 12fd545..07d8b3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [1.1.10][] +#### Added +- Added `which()` function + +#### Changed +- Refactor of `run_command()` function to return an exit code + ## [1.1.9][] #### Added - Added `run_command()` function diff --git a/LICENCE b/LICENCE index cb582d5..d91ed67 100644 --- a/LICENCE +++ b/LICENCE @@ -3,7 +3,7 @@ unless otherwise specified, released under the MIT licence as follows: ----- begin license block ----- -Copyright 2019-2020 Alannah Kearney +Copyright 2019-2021 Alannah Kearney Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index bf596c6..5de4990 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # PHP Helpers: Command-line Functions -- Version: v1.1.9 -- Date: April 06 2020 +- Version: v1.1.10 +- Date: July 29 2021 - [Release notes](https://github.com/pointybeard/helpers-functions-cli/blob/master/CHANGELOG.md) - [GitHub repository](https://github.com/pointybeard/helpers-functions-cli) @@ -28,6 +28,8 @@ This library is a collection convenience function for command-line tasks. They a The following functions are provided: +- `run_command()` +- `which()` - `can_invoke_bash()` - `is_su()` - `run_command()` @@ -48,6 +50,9 @@ use pointybeard\Helpers\Cli\Input; use pointybeard\Helpers\Cli\Colour\Colour; use pointybeard\Helpers\Functions\Cli; +var_dump(Cli\which("ls")); +// string(11) "/usr/bin/ls" + var_dump(Cli\can_invoke_bash()); // bool(true) diff --git a/composer.json b/composer.json index e61fcd0..87779c7 100644 --- a/composer.json +++ b/composer.json @@ -3,6 +3,11 @@ "description": "A collection of functions relating to the command-line", "homepage": "https://github.com/pointybeard/helpers-functions-cli", "license": "MIT", + "minimum-stability": "stable", + "support": { + "issues": "https://github.com/pointybeard/helpers-functions-cli/issues", + "wiki": "https://github.com/pointybeard/helpers-functions-cli/wiki" + }, "authors": [ { "name": "Alannah Kearney", @@ -21,11 +26,13 @@ "pointybeard/helpers-functions-debug": "~1.0", "pointybeard/helpers-exceptions-readabletrace": "~1.0.0" }, - "support": { - "issues": "https://github.com/pointybeard/helpers-functions-cli/issues", - "wiki": "https://github.com/pointybeard/helpers-functions-cli/wiki" + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "squizlabs/php_codesniffer": "^3.0", + "damianopetrungaro/php-commitizen": "^0.1.0", + "php-parallel-lint/php-parallel-lint": "^1.0", + "php-parallel-lint/php-console-highlighter": "^0.5.0" }, - "minimum-stability": "stable", "autoload": { "psr-4": { "pointybeard\\Helpers\\Functions\\": "src/" @@ -33,5 +40,12 @@ "files": [ "src/Cli/Cli.php" ] + }, + "scripts": { + "tidy": "php-cs-fixer fix -v --using-cache=no", + "tidyDry": "@tidy --dry-run", + "test": [ + "parallel-lint . --exclude vendor" + ] } } diff --git a/src/Cli/Exceptions/RunCommandFailedException.php b/src/Cli/Exceptions/RunCommandFailedException.php index 492900f..3665808 100644 --- a/src/Cli/Exceptions/RunCommandFailedException.php +++ b/src/Cli/Exceptions/RunCommandFailedException.php @@ -2,6 +2,15 @@ declare(strict_types=1); +/* + * This file is part of the "PHP Helpers: Command-line Functions" repository. + * + * Copyright 2019-2021 Alannah Kearney + * + * For the full copyright and license information, please view the LICENCE + * file that was distributed with this source code. + */ + namespace pointybeard\Helpers\Functions\Cli\Exceptions; use pointybeard\Helpers\Exceptions\ReadableTrace; @@ -9,6 +18,7 @@ use pointybeard\Helpers\Exceptions\ReadableTrace; class RunCommandFailedException extends ReadableTrace\ReadableTraceException { private $command; + private $error; public function __construct(string $command, string $error, int $code = 0, \Exception $previous = null) From 1992fee96b24e4a72f9980f0cbeaf475ff003e03 Mon Sep 17 00:00:00 2001 From: Alannah Kearney Date: Tue, 7 Sep 2021 11:39:39 +1000 Subject: [PATCH 7/8] fix: Add use clause for Exception so which() can catch RunCommandFailedException correctly --- src/Cli/Cli.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Cli/Cli.php b/src/Cli/Cli.php index 86dc180..cccb18f 100644 --- a/src/Cli/Cli.php +++ b/src/Cli/Cli.php @@ -13,6 +13,7 @@ declare(strict_types=1); namespace pointybeard\Helpers\Functions\Cli; +use Exception; use pointybeard\Helpers\Cli\Colour; use pointybeard\Helpers\Cli\Input; use pointybeard\Helpers\Functions\Arrays; From cedd316946da20bcca1766a0d0e1d53a1da53986 Mon Sep 17 00:00:00 2001 From: Norbert Wagner <5166607+n3w@users.noreply.github.com> Date: Thu, 23 Mar 2023 08:50:28 +0100 Subject: [PATCH 8/8] Passing the separator after the array is no longer supported --- src/Cli/Cli.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Cli/Cli.php b/src/Cli/Cli.php index cccb18f..79e4f9f 100644 --- a/src/Cli/Cli.php +++ b/src/Cli/Cli.php @@ -169,7 +169,7 @@ if (!function_exists(__NAMESPACE__.'usage')) { : $a->name() ); } - $arguments = trim(implode($arguments, ' ')); + $arguments = trim(implode(' ', $arguments)); return sprintf( 'Usage: %s [OPTIONS]... %s%s', @@ -217,13 +217,13 @@ if (!function_exists(__NAMESPACE__.'manpage')) { // Add the arguments, if there are any. if (false === empty($arguments)) { $sections[] = $heading('Arguments:'); - $sections[] = $colourise(implode($arguments, PHP_EOL)).PHP_EOL; + $sections[] = $colourise(implode(PHP_EOL, $arguments)).PHP_EOL; } // Add the options, if there are any. if (false === empty($options)) { $sections[] = $heading('Options:'); - $sections[] = $colourise(implode($options, PHP_EOL)).PHP_EOL; + $sections[] = $colourise(implode(PHP_EOL, $options)).PHP_EOL; } // Iterate over all additional items and add them as new sections @@ -232,7 +232,7 @@ if (!function_exists(__NAMESPACE__.'manpage')) { $sections[] = $colourise($contents).PHP_EOL; } - return implode($sections, PHP_EOL); + return implode(PHP_EOL, $sections); } }