2023-03-15 20:40:49 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace SPC;
|
|
|
|
|
|
|
|
|
|
use SPC\store\FileSystem;
|
|
|
|
|
use Symfony\Component\Console\Application;
|
|
|
|
|
use Symfony\Component\Console\Command\HelpCommand;
|
|
|
|
|
use Symfony\Component\Console\Command\ListCommand;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* spc 应用究级入口
|
|
|
|
|
*/
|
|
|
|
|
class ConsoleApplication extends Application
|
|
|
|
|
{
|
2023-08-06 10:43:20 +08:00
|
|
|
public const VERSION = '2.0-rc5';
|
2023-03-15 20:40:49 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @throws \ReflectionException
|
|
|
|
|
* @throws exception\FileSystemException
|
|
|
|
|
*/
|
|
|
|
|
public function __construct()
|
|
|
|
|
{
|
|
|
|
|
parent::__construct('static-php-cli', self::VERSION);
|
|
|
|
|
|
|
|
|
|
global $argv;
|
|
|
|
|
|
|
|
|
|
// 生产环境不显示详细的调试错误,只使用 symfony console 自带的错误显示
|
|
|
|
|
$this->setCatchExceptions(file_exists(ROOT_DIR . '/.prod') || !in_array('--debug', $argv));
|
|
|
|
|
|
|
|
|
|
// 通过扫描目录 src/static-php-cli/command/ 添加子命令
|
|
|
|
|
$commands = FileSystem::getClassesPsr4(ROOT_DIR . '/src/SPC/command', 'SPC\\command');
|
2023-08-08 19:22:22 +08:00
|
|
|
$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)) {
|
2023-03-15 20:40:49 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$reflection = new \ReflectionClass($y);
|
|
|
|
|
return !$reflection->isAbstract() && !$reflection->isInterface();
|
2023-08-08 19:22:22 +08:00
|
|
|
});
|
|
|
|
|
$this->addCommands(array_map(function ($x) { return new $x(); }, $commands));
|
2023-03-15 20:40:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重载以去除一些不必要的默认命令
|
|
|
|
|
*/
|
|
|
|
|
protected function getDefaultCommands(): array
|
|
|
|
|
{
|
|
|
|
|
return [new HelpCommand(), new ListCommand()];
|
|
|
|
|
}
|
|
|
|
|
}
|