1
0
Fork 0

Show package descriptions in show/search commands, merge similar packages in show, fixes #366

pull/433/merge
Jordi Boggiano 2012-03-11 16:44:18 +01:00
parent 33c926c303
commit 5dba49af54
3 changed files with 39 additions and 14 deletions

View File

@ -19,6 +19,7 @@ use Composer\Repository\CompositeRepository;
use Composer\Repository\PlatformRepository; use Composer\Repository\PlatformRepository;
use Composer\Repository\ComposerRepository; use Composer\Repository\ComposerRepository;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Package\AliasPackage;
/** /**
* @author Robert Schönthal <seroscho@googlemail.com> * @author Robert Schönthal <seroscho@googlemail.com>
@ -56,10 +57,14 @@ EOT
$repos = new CompositeRepository(array($installedRepo, new ComposerRepository(array('url' => 'http://packagist.org')))); $repos = new CompositeRepository(array($installedRepo, new ComposerRepository(array('url' => 'http://packagist.org'))));
} }
$tokens = array_map('strtolower', $input->getArgument('tokens')); $tokens = $input->getArgument('tokens');
$packages = array(); $packages = array();
foreach ($repos->getPackages() as $package) { foreach ($repos->getPackages() as $package) {
if ($package instanceof AliasPackage || isset($packages[$package->getName()])) {
continue;
}
foreach ($tokens as $token) { foreach ($tokens as $token) {
if (!$this->matchPackage($package, $token)) { if (!$this->matchPackage($package, $token)) {
continue; continue;
@ -73,15 +78,16 @@ EOT
$name = $package->getPrettyName(); $name = $package->getPrettyName();
} }
$version = $installedRepo->hasPackage($package) ? '<info>'.$package->getPrettyVersion().'</info>' : $package->getPrettyVersion(); $packages[$package->getName()] = array(
'name' => $name,
$packages[$name][$package->getPrettyVersion()] = $version; 'description' => strtok($package->getDescription(), "\r\n")
);
continue 2; continue 2;
} }
} }
foreach ($packages as $name => $versions) { foreach ($packages as $details) {
$output->writeln($name .' <comment>:</comment> '. join(', ', $versions)); $output->writeln($details['name'] .' <comment>:</comment> '. $details['description']);
} }
} }

View File

@ -83,15 +83,32 @@ EOT
} }
// list packages // list packages
$packages = array();
foreach ($repos->getPackages() as $package) { foreach ($repos->getPackages() as $package) {
if ($platformRepo->hasPackage($package)) { if ($platformRepo->hasPackage($package)) {
$type = '<info>platform: </info> '; $type = '<info>platform</info>:';
} elseif ($installedRepo->hasPackage($package)) { } elseif ($installedRepo->hasPackage($package)) {
$type = '<info>installed:</info> '; $type = '<info>installed</info>:';
} else { } else {
$type = '<comment>available:</comment> '; $type = '<comment>available</comment>:';
}
if (isset($packages[$type][$package->getName()])
&& version_compare($packages[$type][$package->getName()]->getVersion(), $package->getVersion(), '>=')
) {
continue;
}
$packages[$type][$package->getName()] = $package;
}
foreach (array('<info>platform</info>:', '<comment>available</comment>:', '<info>installed</info>:') as $type) {
if (isset($packages[$type])) {
$output->writeln($type);
ksort($packages[$type]);
foreach ($packages[$type] as $package) {
$output->writeln(' '.$package->getPrettyName() .' <comment>:</comment> '. strtok($package->getDescription(), "\r\n"));
}
$output->writeln('');
} }
$output->writeln($type . ' ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . '<comment> (' . $package->getVersion() . ')</comment>');
} }
} }

View File

@ -36,14 +36,15 @@ class PlatformRepository extends ArrayRepository
} }
$php = new MemoryPackage('php', $version, $prettyVersion); $php = new MemoryPackage('php', $version, $prettyVersion);
$php->setDescription('The PHP interpreter');
parent::addPackage($php); parent::addPackage($php);
foreach (get_loaded_extensions() as $ext) { foreach (get_loaded_extensions() as $name) {
if (in_array($ext, array('standard', 'Core'))) { if (in_array($name, array('standard', 'Core'))) {
continue; continue;
} }
$reflExt = new \ReflectionExtension($ext); $reflExt = new \ReflectionExtension($name);
try { try {
$prettyVersion = $reflExt->getVersion(); $prettyVersion = $reflExt->getVersion();
$version = $versionParser->normalize($prettyVersion); $version = $versionParser->normalize($prettyVersion);
@ -52,7 +53,8 @@ class PlatformRepository extends ArrayRepository
$version = $versionParser->normalize($prettyVersion); $version = $versionParser->normalize($prettyVersion);
} }
$ext = new MemoryPackage('ext-'.strtolower($ext), $version, $prettyVersion); $ext = new MemoryPackage('ext-'.$name, $version, $prettyVersion);
$ext->setDescription('The '.$name.' PHP extension');
parent::addPackage($ext); parent::addPackage($ext);
} }
} }