From 85ec42bac3c5b65eebf205664f42d163c85a74f2 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Mon, 19 Dec 2011 23:48:14 +0100 Subject: [PATCH] display highest package version by default on show command --- src/Composer/Command/ShowCommand.php | 42 ++++++++++++++++++---------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/Composer/Command/ShowCommand.php b/src/Composer/Command/ShowCommand.php index 4c0b771d5..07a70d7fb 100644 --- a/src/Composer/Command/ShowCommand.php +++ b/src/Composer/Command/ShowCommand.php @@ -70,21 +70,13 @@ EOT return $composer->getRepositoryManager()->findPackage($input->getArgument('package'), $input->getArgument('version')); } - // check if we have a local installation so we can grab the right package/version - $localRepo = $composer->getRepositoryManager()->getLocalRepository(); - foreach ($localRepo->getPackages() as $package) { - if ($package->getName() === $input->getArgument('package')) { - return $package; - } - } - - // we only have a name, so search for the first package where the name matches - foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { - foreach ($repository->getPackages() as $package) { - if ($package->getName() === $input->getArgument('package')) { - return $package; - } - } + // we only have a name, so search for the highest package where the name matches + $repos = array_merge( + array($composer->getRepositoryManager()->getLocalRepository()), + $composer->getRepositoryManager()->getRepositories() + ); + if ($package = $this->getHighestVersion($repos, $input->getArgument('package'))) { + return $package; } } @@ -158,4 +150,24 @@ EOT } } } + + /** + * get highest matching package name from an array of repositories + */ + protected function getHighestVersion(array $repos, $packageName) + { + $highest = null; + + foreach ($repos as $repository) { + foreach ($repository->getPackages() as $package) { + if ($packageName === $package->getName()) { + if (null === $highest || version_compare($package->getVersion(), $highest->getVersion(), '>=')) { + $highest = $package; + } + } + } + } + + return $highest; + } } \ No newline at end of file