diff --git a/src/SPC/ConsoleApplication.php b/src/SPC/ConsoleApplication.php
index 598bdd10..c9f1814e 100644
--- a/src/SPC/ConsoleApplication.php
+++ b/src/SPC/ConsoleApplication.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace SPC;
-use SPC\command\DeployCommand;
use SPC\store\FileSystem;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\HelpCommand;
@@ -32,13 +31,19 @@ class ConsoleApplication extends Application
// 通过扫描目录 src/static-php-cli/command/ 添加子命令
$commands = FileSystem::getClassesPsr4(ROOT_DIR . '/src/SPC/command', 'SPC\\command');
- $this->addCommands(array_map(function ($x) { return new $x(); }, array_filter($commands, function ($y) {
- if (is_a($y, DeployCommand::class, true) && (class_exists('\\Phar') && \Phar::running() || !class_exists('\\Phar'))) {
+ $phar = class_exists('\\Phar') && \Phar::running() || !class_exists('\\Phar');
+ $commands = array_filter($commands, function ($y) use ($phar) {
+ $archive_blacklist = [
+ 'SPC\command\dev\SortConfigCommand',
+ 'SPC\command\DeployCommand',
+ ];
+ if ($phar && in_array($y, $archive_blacklist)) {
return false;
}
$reflection = new \ReflectionClass($y);
return !$reflection->isAbstract() && !$reflection->isInterface();
- })));
+ });
+ $this->addCommands(array_map(function ($x) { return new $x(); }, $commands));
}
/**
diff --git a/src/SPC/command/ListExtCommand.php b/src/SPC/command/ListExtCommand.php
deleted file mode 100644
index d8547f07..00000000
--- a/src/SPC/command/ListExtCommand.php
+++ /dev/null
@@ -1,26 +0,0 @@
- $meta) {
- echo $ext . PHP_EOL;
- }
- return static::SUCCESS;
- }
-}
diff --git a/src/SPC/command/dev/AllExtCommand.php b/src/SPC/command/dev/AllExtCommand.php
index e04a984d..c8a18495 100644
--- a/src/SPC/command/dev/AllExtCommand.php
+++ b/src/SPC/command/dev/AllExtCommand.php
@@ -8,16 +8,17 @@ use SPC\command\BaseCommand;
use SPC\store\Config;
use Symfony\Component\Console\Attribute\AsCommand;
-#[AsCommand('dev:ext-all', 'Dev command')]
+#[AsCommand('dev:ext-all', 'Dev command', ['list-ext'])]
class AllExtCommand extends BaseCommand
{
public function configure()
{
+ $this->addOption('line', 'l', null, 'Show with separate lines');
}
public function handle(): int
{
- $this->output->writeln(implode(',', array_keys(Config::getExts())));
+ $this->output->writeln(implode($this->input->getOption('line') ? PHP_EOL : ',', array_keys(Config::getExts())));
return static::SUCCESS;
}
}
diff --git a/src/SPC/command/SortConfigCommand.php b/src/SPC/command/dev/SortConfigCommand.php
similarity index 59%
rename from src/SPC/command/SortConfigCommand.php
rename to src/SPC/command/dev/SortConfigCommand.php
index 579b2a89..39e32f31 100644
--- a/src/SPC/command/SortConfigCommand.php
+++ b/src/SPC/command/dev/SortConfigCommand.php
@@ -2,8 +2,9 @@
declare(strict_types=1);
-namespace SPC\command;
+namespace SPC\command\dev;
+use SPC\command\BaseCommand;
use SPC\exception\FileSystemException;
use SPC\exception\ValidationException;
use SPC\store\FileSystem;
@@ -12,9 +13,9 @@ use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputArgument;
/**
- * 修改 config 后对其 kv 进行排序的操作
+ * Modify config file: sort lib, ext, source by name.
*/
-#[AsCommand('sort-config', 'After config edited, sort it by alphabet')]
+#[AsCommand('dev:sort-config', 'After config edited, sort it by alphabet', ['sort-config'])]
class SortConfigCommand extends BaseCommand
{
public function configure()
@@ -33,19 +34,28 @@ class SortConfigCommand extends BaseCommand
$file = json_decode(FileSystem::readFile(ROOT_DIR . '/config/lib.json'), true);
ConfigValidator::validateLibs($file);
ksort($file);
- file_put_contents(ROOT_DIR . '/config/lib.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ if (!file_put_contents(ROOT_DIR . '/config/lib.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) {
+ $this->output->writeln('Write file lib.json failed!');
+ return static::FAILURE;
+ }
break;
case 'source':
$file = json_decode(FileSystem::readFile(ROOT_DIR . '/config/source.json'), true);
ConfigValidator::validateSource($file);
uksort($file, fn ($a, $b) => $a === 'php-src' ? -1 : ($b === 'php-src' ? 1 : ($a < $b ? -1 : 1)));
- file_put_contents(ROOT_DIR . '/config/source.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ if (!file_put_contents(ROOT_DIR . '/config/source.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) {
+ $this->output->writeln('Write file source.json failed!');
+ return static::FAILURE;
+ }
break;
case 'ext':
$file = json_decode(FileSystem::readFile(ROOT_DIR . '/config/ext.json'), true);
ConfigValidator::validateExts($file);
ksort($file);
- file_put_contents(ROOT_DIR . '/config/ext.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ if (!file_put_contents(ROOT_DIR . '/config/ext.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) {
+ $this->output->writeln('Write file ext.json failed!');
+ return static::FAILURE;
+ }
break;
default:
$this->output->writeln("invalid config name: {$name}");