1
0
Fork 0

Fix abandoned package list JSON serialization (#11647)

Co-authored-by: Jordi Boggiano <j.boggiano@seld.be>
pull/11664/head
Dezső BICZÓ 2023-09-26 14:23:45 +02:00 committed by GitHub
parent 1f9f91cfea
commit 755de04bf5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 12 deletions

View File

@ -86,7 +86,10 @@ class Auditor
if ($ignoredAdvisories !== []) { if ($ignoredAdvisories !== []) {
$json['ignored-advisories'] = $ignoredAdvisories; $json['ignored-advisories'] = $ignoredAdvisories;
} }
$json['abandoned'] = $abandonedPackages; $json['abandoned'] = array_reduce($abandonedPackages, static function(array $carry, CompletePackageInterface $package): array {
$carry[$package->getPrettyName()] = $package->getReplacementPackage();
return $carry;
}, []);
$io->write(JsonFile::encode($json)); $io->write(JsonFile::encode($json));
@ -127,11 +130,11 @@ class Auditor
/** /**
* @param array<PackageInterface> $packages * @param array<PackageInterface> $packages
* @return array<PackageInterface> * @return array<CompletePackageInterface>
*/ */
private function filterAbandonedPackages(array $packages): array private function filterAbandonedPackages(array $packages): array
{ {
return array_filter($packages, function (PackageInterface $pkg) { return array_filter($packages, static function (PackageInterface $pkg) {
return $pkg instanceof CompletePackageInterface && $pkg->isAbandoned(); return $pkg instanceof CompletePackageInterface && $pkg->isAbandoned();
}); });
} }
@ -305,7 +308,7 @@ class Auditor
} }
/** /**
* @param array<PackageInterface> $packages * @param array<CompletePackageInterface> $packages
* @param self::FORMAT_PLAIN|self::FORMAT_TABLE $format * @param self::FORMAT_PLAIN|self::FORMAT_TABLE $format
*/ */
private function outputAbandonedPackages(IOInterface $io, array $packages, string $format): void private function outputAbandonedPackages(IOInterface $io, array $packages, string $format): void
@ -314,10 +317,6 @@ class Auditor
if ($format === self::FORMAT_PLAIN) { if ($format === self::FORMAT_PLAIN) {
foreach ($packages as $pkg) { foreach ($packages as $pkg) {
if (!$pkg instanceof CompletePackageInterface) {
continue;
}
$replacement = $pkg->getReplacementPackage() !== null $replacement = $pkg->getReplacementPackage() !== null
? 'Use '.$pkg->getReplacementPackage().' instead' ? 'Use '.$pkg->getReplacementPackage().' instead'
: 'No replacement was suggested'; : 'No replacement was suggested';
@ -341,10 +340,6 @@ class Auditor
->setColumnMaxWidth(1, 80); ->setColumnMaxWidth(1, 80);
foreach ($packages as $pkg) { foreach ($packages as $pkg) {
if (!$pkg instanceof CompletePackageInterface) {
continue;
}
$replacement = $pkg->getReplacementPackage() !== null ? $pkg->getReplacementPackage() : 'none'; $replacement = $pkg->getReplacementPackage() !== null ? $pkg->getReplacementPackage() : 'none';
$table->addRow([$this->getPackageNameWithLink($pkg), $replacement]); $table->addRow([$this->getPackageNameWithLink($pkg), $replacement]);
} }

View File

@ -122,6 +122,26 @@ Found 2 abandoned packages:
| vendor/abandoned2 | none | | vendor/abandoned2 | none |
+-------------------+----------------------------------------------------------------------------------+', +-------------------+----------------------------------------------------------------------------------+',
]; ];
yield 'abandoned packages fails with json format' => [
'data' => [
'packages' => [
$abandonedWithReplacement,
$abandonedNoReplacement,
],
'warningOnly' => false,
'abandoned' => Auditor::ABANDONED_FAIL,
'format' => Auditor::FORMAT_JSON,
],
'expected' => 2,
'output' => '{
"advisories": [],
"abandoned": {
"vendor/abandoned": "foo/bar",
"vendor/abandoned2": null
}
}',
];
} }
/** /**