1
0
Fork 0

CheckPlatformReqs: Add json format output (#10979)

Co-authored-by: Jordi Boggiano <j.boggiano@seld.be>
pull/10996/head
Jellyfrog 2022-08-16 14:19:53 +02:00 committed by GitHub
parent e82050b05d
commit 058beef20a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 13 deletions

View File

@ -413,6 +413,12 @@ Unlike update/install, this command will ignore config.platform settings and
check the real platform packages so you can be certain you have the required
platform dependencies.
### Options
* **--lock:** Checks requirements only from the lock file, not from installed packages.
* **--no-dev:** Disables checking of require-dev packages requirements.
* **--format (-f):** Format of the output: text (default) or json
## global
The global command allows you to run other commands like `install`, `remove`, `require`

View File

@ -15,11 +15,12 @@ namespace Composer\Command;
use Composer\Package\Link;
use Composer\Semver\Constraint\Constraint;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Composer\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Composer\Repository\PlatformRepository;
use Composer\Repository\RootPackageRepository;
use Composer\Repository\InstalledRepository;
use Composer\Json\JsonFile;
class CheckPlatformReqsCommand extends BaseCommand
{
@ -33,6 +34,7 @@ class CheckPlatformReqsCommand extends BaseCommand
->setDefinition(array(
new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables checking of require-dev packages requirements.'),
new InputOption('lock', null, InputOption::VALUE_NONE, 'Checks requirements only from the lock file, not from installed packages.'),
new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text', ['json', 'text']),
))
->setHelp(
<<<EOT
@ -127,7 +129,8 @@ EOT
$candidate->getName() === $require ? $candidate->getPrettyName() : $require,
$candidateConstraint->getPrettyString(),
$link,
'<error>failed</error>'.($candidate->getName() === $require ? '' : ' <comment>provided by '.$candidate->getPrettyName().'</comment>'),
'<error>failed</error>',
$candidate->getName() === $require ? '' : '<comment>provided by '.$candidate->getPrettyName().'</comment>',
);
// skip to next candidate
@ -139,7 +142,8 @@ EOT
$candidate->getName() === $require ? $candidate->getPrettyName() : $require,
$candidateConstraint->getPrettyString(),
null,
'<info>success</info>'.($candidate->getName() === $require ? '' : ' <comment>provided by '.$candidate->getPrettyName().'</comment>'),
'<info>success</info>',
$candidate->getName() === $require ? '' : '<comment>provided by '.$candidate->getPrettyName().'</comment>',
);
// candidate matched, skip to next requirement
@ -158,13 +162,14 @@ EOT
'n/a',
$links[0],
'<error>missing</error>',
'',
);
$exitCode = max($exitCode, 2);
}
}
$this->printTable($output, $results);
$this->printTable($output, $results, $input->getOption('format'));
return $exitCode;
}
@ -174,22 +179,43 @@ EOT
*
* @return void
*/
protected function printTable(OutputInterface $output, array $results): void
protected function printTable(OutputInterface $output, array $results, string $format): void
{
$rows = array();
foreach ($results as $result) {
/**
* @var Link|null $link
*/
list($platformPackage, $version, $link, $status) = $result;
$rows[] = array(
$platformPackage,
$version,
$link ? sprintf('%s %s %s (%s)', $link->getSource(), $link->getDescription(), $link->getTarget(), $link->getPrettyConstraint()) : '',
$status,
);
list($platformPackage, $version, $link, $status, $provider) = $result;
if ('json' === $format) {
$rows[] = array(
"name" => $platformPackage,
"version" => $version,
"status" => strip_tags($status),
"failed_requirement" => $link instanceof Link ? [
'source' => $link->getSource(),
'type' => $link->getDescription(),
'target' => $link->getTarget(),
'constraint' => $link->getPrettyConstraint(),
] : null,
"provider" => $provider === '' ? null : strip_tags($provider),
);
} else {
$rows[] = array(
$platformPackage,
$version,
$link,
$link ? sprintf('%s %s %s (%s)', $link->getSource(), $link->getDescription(), $link->getTarget(), $link->getPrettyConstraint()) : '',
rtrim($status.' '.$provider),
);
}
}
$this->renderTable($rows, $output);
if ('json' === $format) {
$this->getIO()->write(JsonFile::encode($rows));
} else {
$this->renderTable($rows, $output);
}
}
}