1
0
Fork 0

Split direct/transitive dependencies in two groups in outdated command, fixes #10447 (#10779)

pull/10815/head
Jordi Boggiano 2022-06-01 22:14:01 +02:00 committed by GitHub
parent 5888945c30
commit 829fca0be1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 70 additions and 33 deletions

View File

@ -15,6 +15,7 @@ namespace Composer\Command;
use Composer\Composer;
use Composer\DependencyResolver\DefaultPolicy;
use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterInterface;
use Composer\IO\IOInterface;
use Composer\Json\JsonFile;
use Composer\Package\BasePackage;
use Composer\Package\CompletePackageInterface;
@ -477,6 +478,7 @@ EOT
}
$packageViewData['name'] = $package->getPrettyName();
$packageViewData['direct-dependency'] = in_array($package->getName(), $this->getRootRequires(), true);
if ($format !== 'json' || true !== $input->getOption('name-only')) {
$packageViewData['homepage'] = $package instanceof CompletePackageInterface ? $package->getHomepage() : null;
$packageViewData['source'] = PackageInfo::getViewSourceUrl($package);
@ -580,6 +582,49 @@ EOT
}
}
if ($writeLatest && !$input->getOption('direct')) {
$directDeps = [];
$transitiveDeps = [];
foreach ($packages as $pkg) {
if ($pkg['direct-dependency'] ?? false) {
$directDeps[] = $pkg;
} else {
$transitiveDeps[] = $pkg;
}
}
$io->write('');
$io->write('<info>Direct dependencies:</>');
if (\count($directDeps) > 0) {
$this->printPackages($io, $directDeps, $indent, $writeVersion, $writeLatest, $writeDescription, $width, $versionLength, $nameLength, $latestLength);
} else {
$io->write('Everything up to date');
}
$io->write('');
$io->write('<info>Transitive dependencies:</>');
if (\count($transitiveDeps) > 0) {
$this->printPackages($io, $transitiveDeps, $indent, $writeVersion, $writeLatest, $writeDescription, $width, $versionLength, $nameLength, $latestLength);
} else {
$io->write('Everything up to date');
}
} else {
$this->printPackages($io, $packages, $indent, $writeVersion, $writeLatest, $writeDescription, $width, $versionLength, $nameLength, $latestLength);
}
if ($showAllTypes) {
$io->write('');
}
}
}
return $exitCode;
}
/**
* @param array<array{name: string, direct-dependency?: bool, version?: string, latest?: string, latest-status?: string, description?: string|null, path?: string, source?: string|null, homepage?: string|null, warning?: string, abandoned?: bool|string}> $packages
*/
private function printPackages(IOInterface $io, array $packages, string $indent, bool $writeVersion, bool $writeLatest, bool $writeDescription, int $width, int $versionLength, int $nameLength, int $latestLength): void
{
foreach ($packages as $package) {
$link = $package['source'] ?? $package['homepage'] ?? '';
if ($link !== '') {
@ -618,14 +663,6 @@ EOT
$io->write('<warning>' . $package['warning'] . '</warning>');
}
}
if ($showAllTypes) {
$io->write('');
}
}
}
return $exitCode;
}
/**