Extract view logic from data preparation

main
Alexander Schwenn 7 years ago
parent 64139ba327
commit 818687849d

@ -286,6 +286,8 @@ EOT
$indent = $showAllTypes ? ' ' : ''; $indent = $showAllTypes ? ' ' : '';
$latestPackages = array(); $latestPackages = array();
$exitCode = 0; $exitCode = 0;
$viewData = array();
$viewMetaData = array();
foreach (array('platform' => true, 'available' => false, 'installed' => true) as $type => $showVersion) { foreach (array('platform' => true, 'available' => false, 'installed' => true) as $type => $showVersion) {
if (isset($packages[$type])) { if (isset($packages[$type])) {
ksort($packages[$type]); ksort($packages[$type]);
@ -313,22 +315,20 @@ EOT
} }
$writePath = !$input->getOption('name-only') && $input->getOption('path'); $writePath = !$input->getOption('name-only') && $input->getOption('path');
$writeVersion = !$input->getOption('name-only') && !$input->getOption('path') && $showVersion && ($nameLength + $versionLength + 3 <= $width); $writeVersion = !$input->getOption('name-only') && !$input->getOption('path') && $showVersion;
$writeLatest = $writeVersion && $showLatest && ($nameLength + $versionLength + $latestLength + 3 <= $width); $writeLatest = $writeVersion && $showLatest;
$writeDescription = !$input->getOption('name-only') && !$input->getOption('path') && ($nameLength + $versionLength + $latestLength + 24 <= $width); $writeDescription = !$input->getOption('name-only') && !$input->getOption('path');
if ($writeLatest && !$io->isDecorated()) {
$latestLength += 2;
}
$hasOutdatedPackages = false; $hasOutdatedPackages = false;
if ($showAllTypes) { $viewData[$type] = array();
if ('available' === $type) { $viewMetaData[$type] = array(
$io->write('<comment>' . $type . '</comment>:'); 'nameLength' => $nameLength,
} else { 'versionLength' => $versionLength,
$io->write('<info>' . $type . '</info>:'); 'latestLength' => $latestLength,
} );
}
foreach ($packages[$type] as $package) { foreach ($packages[$type] as $package) {
$packageViewData = array();
if (is_object($package)) { if (is_object($package)) {
$latestPackage = null; $latestPackage = null;
if ($showLatest && isset($latestPackages[$package->getPrettyName()])) { if ($showLatest && isset($latestPackages[$package->getPrettyName()])) {
@ -340,36 +340,19 @@ EOT
$hasOutdatedPackages = true; $hasOutdatedPackages = true;
} }
$io->write($indent . str_pad($package->getPrettyName(), $nameLength, ' '), false); $packageViewData['name'] = $package->getPrettyName();
if ($writeVersion) { if ($writeVersion) {
$io->write(' ' . str_pad($package->getFullPrettyVersion(), $versionLength, ' '), false); $packageViewData['version'] = $package->getFullPrettyVersion();
} }
if ($writeLatest && $latestPackage) { if ($writeLatest && $latestPackage) {
$latestVersion = $latestPackage->getFullPrettyVersion(); $packageViewData['latest'] = $latestPackage->getFullPrettyVersion();
$style = $this->getVersionStyle($latestPackage, $package); $packageViewData['latestStyle'] = $this->getVersionStyle($latestPackage, $package);
if (!$io->isDecorated()) {
$latestVersion = str_replace(array('info', 'highlight', 'comment'), array('=', '!', '~'), $style) . ' ' . $latestVersion;
}
$io->write(' <'.$style.'>' . str_pad($latestVersion, $latestLength, ' ') . '</'.$style.'>', false);
} }
if ($writeDescription) { if ($writeDescription) {
$description = strtok($package->getDescription(), "\r\n"); $packageViewData['description'] = $package->getDescription();
$remaining = $width - $nameLength - $versionLength - 4;
if ($writeLatest) {
$remaining -= $latestLength;
}
if (strlen($description) > $remaining) {
$description = substr($description, 0, $remaining - 3) . '...';
}
$io->write(' ' . $description, false);
} }
if ($writePath) { if ($writePath) {
$path = strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n"); $packageViewData['path'] = strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n");
$io->write(' ' . $path, false);
} }
if ($latestPackage && $latestPackage->isAbandoned()) { if ($latestPackage && $latestPackage->isAbandoned()) {
@ -381,16 +364,12 @@ EOT
$package->getPrettyName(), $package->getPrettyName(),
$replacement $replacement
); );
$io->writeError(''); $packageViewData['warning'] = $packageWarning;
$io->writeError('<warning>' . $packageWarning . '</warning>', false);
} }
} else { } else {
$io->write($indent . $package, false); $packageViewData['name'] = $package;
} }
$io->write(''); $viewData[$type][] = $packageViewData;
}
if ($showAllTypes) {
$io->write('');
} }
if ($input->getOption('strict') && $hasOutdatedPackages) { if ($input->getOption('strict') && $hasOutdatedPackages) {
$exitCode = 1; $exitCode = 1;
@ -399,6 +378,66 @@ EOT
} }
} }
foreach ($viewData as $type => $packages) {
$nameLength = $viewMetaData[$type]['nameLength'];
$versionLength = $viewMetaData[$type]['versionLength'];
$latestLength = $viewMetaData[$type]['latestLength'];
$writeVersion = $nameLength + $versionLength + 3 <= $width;
$writeLatest = $nameLength + $versionLength + $latestLength + 3 <= $width;
$writeDescription = $nameLength + $versionLength + $latestLength + 24 <= $width;
if ($writeLatest && !$io->isDecorated()) {
$latestLength += 2;
}
if ($showAllTypes) {
if ('available' === $type) {
$io->write('<comment>' . $type . '</comment>:');
} else {
$io->write('<info>' . $type . '</info>:');
}
}
foreach ($packages as $package) {
$io->write($indent . str_pad($package['name'], $nameLength, ' '), false);
if (isset($package['version']) && $writeVersion) {
$io->write(' ' . str_pad($package['version'], $versionLength, ' '), false);
}
if (isset($package['latest']) && $writeLatest) {
$latestVersion = $package['latest'];
$style = $package['latestStyle'];
if (!$io->isDecorated()) {
$latestVersion = str_replace(array('info', 'highlight', 'comment'), array('=', '!', '~'), $style) . ' ' . $latestVersion;
}
$io->write(' <'.$style.'>' . str_pad($latestVersion, $latestLength, ' ') . '</'.$style.'>', false);
}
if (isset($package['description']) && $writeDescription) {
$description = strtok($package['description'], "\r\n");
$remaining = $width - $nameLength - $versionLength - 4;
if ($writeLatest) {
$remaining -= $latestLength;
}
if (strlen($description) > $remaining) {
$description = substr($description, 0, $remaining - 3) . '...';
}
$io->write(' ' . $description, false);
}
if (isset($package['path'])) {
$io->write(' ' . $package['path'], false);
}
if (isset($package['warning'])) {
$io->writeError('');
$io->writeError('<warning>' . $package['warning'] . '</warning>', false);
}
$io->write('');
}
if ($showAllTypes) {
$io->write('');
}
}
return $exitCode; return $exitCode;
} }

Loading…
Cancel
Save