Browse Source

display highest package version by default on show command

Igor Wiedler 13 years ago
parent
commit
85ec42bac3
1 changed files with 27 additions and 15 deletions
  1. 27 15
      src/Composer/Command/ShowCommand.php

+ 27 - 15
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;
+    }
 }