mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-03-18 04:44:53 +08:00
separate --from-zip in download command
This commit is contained in:
parent
c9b544f8c4
commit
c800a53f77
@ -33,12 +33,17 @@ class DownloadCommand extends BaseCommand
|
|||||||
$this->addOption('all', 'A', null, 'Fetch all sources that static-php-cli needed');
|
$this->addOption('all', 'A', null, 'Fetch all sources that static-php-cli needed');
|
||||||
$this->addOption('custom-url', 'U', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Specify custom source download url, e.g "php-src:https://downloads.php.net/~eric/php-8.3.0beta1.tar.gz"');
|
$this->addOption('custom-url', 'U', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Specify custom source download url, e.g "php-src:https://downloads.php.net/~eric/php-8.3.0beta1.tar.gz"');
|
||||||
$this->addOption('from-zip', 'Z', InputOption::VALUE_REQUIRED, 'Fetch from zip archive');
|
$this->addOption('from-zip', 'Z', InputOption::VALUE_REQUIRED, 'Fetch from zip archive');
|
||||||
|
$this->addOption('by-extensions', 'e', InputOption::VALUE_REQUIRED, 'Fetch by extensions, e.g "openssl,mbstring"');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initialize(InputInterface $input, OutputInterface $output): void
|
public function initialize(InputInterface $input, OutputInterface $output): void
|
||||||
{
|
{
|
||||||
// --all 等于 "" "",也就是所有东西都要下载
|
if (
|
||||||
if ($input->getOption('all') || $input->getOption('clean') || $input->getOption('from-zip')) {
|
$input->getOption('all')
|
||||||
|
|| $input->getOption('clean')
|
||||||
|
|| $input->getOption('from-zip')
|
||||||
|
|| $input->getOption('by-extensions')
|
||||||
|
) {
|
||||||
$input->setArgument('sources', '');
|
$input->setArgument('sources', '');
|
||||||
}
|
}
|
||||||
parent::initialize($input, $output);
|
parent::initialize($input, $output);
|
||||||
@ -73,40 +78,7 @@ class DownloadCommand extends BaseCommand
|
|||||||
|
|
||||||
// --from-zip
|
// --from-zip
|
||||||
if ($path = $this->getOption('from-zip')) {
|
if ($path = $this->getOption('from-zip')) {
|
||||||
if (!file_exists($path)) {
|
return $this->downloadFromZip($path);
|
||||||
logger()->critical('File ' . $path . ' not exist or not a zip archive.');
|
|
||||||
return static::FAILURE;
|
|
||||||
}
|
|
||||||
// remove old download files first
|
|
||||||
if (is_dir(DOWNLOAD_PATH)) {
|
|
||||||
logger()->warning('You are doing some operations that not recoverable: removing directories below');
|
|
||||||
logger()->warning(DOWNLOAD_PATH);
|
|
||||||
logger()->alert('I will remove these dir after 5 seconds !');
|
|
||||||
sleep(5);
|
|
||||||
f_passthru((PHP_OS_FAMILY === 'Windows' ? 'rmdir /s /q ' : 'rm -rf ') . DOWNLOAD_PATH);
|
|
||||||
}
|
|
||||||
// unzip command check
|
|
||||||
if (PHP_OS_FAMILY !== 'Windows' && !$this->findCommand('unzip')) {
|
|
||||||
logger()->critical('Missing unzip command, you need to install it first !');
|
|
||||||
logger()->critical('You can use "bin/spc doctor" command to check and install required tools');
|
|
||||||
return static::FAILURE;
|
|
||||||
}
|
|
||||||
// create downloads
|
|
||||||
try {
|
|
||||||
if (PHP_OS_FAMILY !== 'Windows') {
|
|
||||||
f_passthru('mkdir ' . DOWNLOAD_PATH . ' && cd ' . DOWNLOAD_PATH . ' && unzip ' . escapeshellarg($path));
|
|
||||||
}
|
|
||||||
// Windows TODO
|
|
||||||
|
|
||||||
if (!file_exists(DOWNLOAD_PATH . '/.lock.json')) {
|
|
||||||
throw new RuntimeException('.lock.json not exist in "downloads/"');
|
|
||||||
}
|
|
||||||
} catch (RuntimeException $e) {
|
|
||||||
logger()->critical('Extract failed: ' . $e->getMessage());
|
|
||||||
return static::FAILURE;
|
|
||||||
}
|
|
||||||
logger()->info('Extract success');
|
|
||||||
return static::SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define PHP major version
|
// Define PHP major version
|
||||||
@ -177,4 +149,42 @@ class DownloadCommand extends BaseCommand
|
|||||||
logger()->info('Download complete, used ' . $time . ' s !');
|
logger()->info('Download complete, used ' . $time . ' s !');
|
||||||
return static::SUCCESS;
|
return static::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function downloadFromZip(string $path): int
|
||||||
|
{
|
||||||
|
if (!file_exists($path)) {
|
||||||
|
logger()->critical('File ' . $path . ' not exist or not a zip archive.');
|
||||||
|
return static::FAILURE;
|
||||||
|
}
|
||||||
|
// remove old download files first
|
||||||
|
if (is_dir(DOWNLOAD_PATH)) {
|
||||||
|
logger()->warning('You are doing some operations that not recoverable: removing directories below');
|
||||||
|
logger()->warning(DOWNLOAD_PATH);
|
||||||
|
logger()->alert('I will remove these dir after 5 seconds !');
|
||||||
|
sleep(5);
|
||||||
|
f_passthru((PHP_OS_FAMILY === 'Windows' ? 'rmdir /s /q ' : 'rm -rf ') . DOWNLOAD_PATH);
|
||||||
|
}
|
||||||
|
// unzip command check
|
||||||
|
if (PHP_OS_FAMILY !== 'Windows' && !$this->findCommand('unzip')) {
|
||||||
|
logger()->critical('Missing unzip command, you need to install it first !');
|
||||||
|
logger()->critical('You can use "bin/spc doctor" command to check and install required tools');
|
||||||
|
return static::FAILURE;
|
||||||
|
}
|
||||||
|
// create downloads
|
||||||
|
try {
|
||||||
|
if (PHP_OS_FAMILY !== 'Windows') {
|
||||||
|
f_passthru('mkdir ' . DOWNLOAD_PATH . ' && cd ' . DOWNLOAD_PATH . ' && unzip ' . escapeshellarg($path));
|
||||||
|
}
|
||||||
|
// Windows TODO
|
||||||
|
|
||||||
|
if (!file_exists(DOWNLOAD_PATH . '/.lock.json')) {
|
||||||
|
throw new RuntimeException('.lock.json not exist in "downloads/"');
|
||||||
|
}
|
||||||
|
} catch (RuntimeException $e) {
|
||||||
|
logger()->critical('Extract failed: ' . $e->getMessage());
|
||||||
|
return static::FAILURE;
|
||||||
|
}
|
||||||
|
logger()->info('Extract success');
|
||||||
|
return static::SUCCESS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user