From 5bea5974f7a5f70aa85d98ac155bd404c4e90bcb Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 7 Jun 2012 03:23:23 +0200 Subject: [PATCH] Improve error messages for solver problems --- src/Composer/DependencyResolver/Problem.php | 27 +++++++++++++++------ src/Composer/DependencyResolver/Rule.php | 2 +- src/Composer/Package/BasePackage.php | 5 ++++ src/Composer/Package/PackageInterface.php | 7 ++++++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/Composer/DependencyResolver/Problem.php b/src/Composer/DependencyResolver/Problem.php index 012ebab2f..a1407c41b 100644 --- a/src/Composer/DependencyResolver/Problem.php +++ b/src/Composer/DependencyResolver/Problem.php @@ -66,10 +66,10 @@ class Problem $ext = substr($job['packageName'], 4); $error = extension_loaded($ext) ? 'has the wrong version ('.phpversion($ext).') installed' : 'is missing from your system'; - return 'The requested PHP extension "'.$job['packageName'].'" '.$this->constraintToText($job['constraint']).$error.'.'; + return 'The requested PHP extension '.$job['packageName'].$this->constraintToText($job['constraint']).' '.$error.'.'; } - return 'The requested package "'.$job['packageName'].'" '.$this->constraintToText($job['constraint']).'could not be found.'; + return 'The requested package '.$job['packageName'].$this->constraintToText($job['constraint']).' could not be found.'; } } @@ -115,14 +115,27 @@ class Problem { switch ($job['cmd']) { case 'install': - return 'Installation of package "'.$job['packageName'].'" '.$this->constraintToText($job['constraint']).'was requested. Satisfiable by packages ['.implode(', ', $job['packages']).'].'; + if (!$job['packages']) { + return 'No package found to satisfy install request for '.$job['packageName'].$this->constraintToText($job['constraint']); + } + + return 'Installation request for '.$job['packageName'].$this->constraintToText($job['constraint']).': Satisfiable by ['.$this->getPackageList($job['packages']).'].'; case 'update': - return 'Update of package "'.$job['packageName'].'" '.$this->constraintToText($job['constraint']).'was requested.'; + return 'Update request for '.$job['packageName'].$this->constraintToText($job['constraint']).'.'; case 'remove': - return 'Removal of package "'.$job['packageName'].'" '.$this->constraintToText($job['constraint']).'was requested.'; + return 'Removal request for '.$job['packageName'].$this->constraintToText($job['constraint']).''; } - return 'Job(cmd='.$job['cmd'].', target='.$job['packageName'].', packages=['.implode(', ', $job['packages']).'])'; + return 'Job(cmd='.$job['cmd'].', target='.$job['packageName'].', packages=['.$this->packageList($job['packages']).'])'; + } + + protected function getPackageList($packages) + { + return implode(', ', array_map(function ($package) { + return $package->getPrettyString(); + }, + $packages + )); } /** @@ -133,6 +146,6 @@ class Problem */ protected function constraintToText($constraint) { - return ($constraint) ? 'with constraint '.$constraint.' ' : ''; + return ($constraint) ? ' '.$constraint : ''; } } diff --git a/src/Composer/DependencyResolver/Rule.php b/src/Composer/DependencyResolver/Rule.php index a5414ebd9..92f80a65c 100644 --- a/src/Composer/DependencyResolver/Rule.php +++ b/src/Composer/DependencyResolver/Rule.php @@ -171,7 +171,7 @@ class Rule $package1 = $this->pool->literalToPackage($this->literals[0]); $package2 = $this->pool->literalToPackage($this->literals[1]); - return 'Package "'.$package1.'" conflicts with "'.$package2.'"'; + return 'Package '.$package1->getPrettyString().' conflicts with '.$package2->getPrettyString().'"'; case self::RULE_PACKAGE_REQUIRES: $literals = $this->literals; diff --git a/src/Composer/Package/BasePackage.php b/src/Composer/Package/BasePackage.php index 64f6ea6c2..f3543d1a5 100644 --- a/src/Composer/Package/BasePackage.php +++ b/src/Composer/Package/BasePackage.php @@ -201,6 +201,11 @@ abstract class BasePackage implements PackageInterface return $this->getUniqueName(); } + public function getPrettyString() + { + return $this->getPrettyName().'-'.$this->getPrettyVersion(); + } + public function __clone() { $this->repository = null; diff --git a/src/Composer/Package/PackageInterface.php b/src/Composer/Package/PackageInterface.php index fb435b19b..4d088ac5f 100644 --- a/src/Composer/Package/PackageInterface.php +++ b/src/Composer/Package/PackageInterface.php @@ -356,4 +356,11 @@ interface PackageInterface * @return string */ public function __toString(); + + /** + * Converts the package into a pretty readable string + * + * @return string + */ + public function getPrettyString(); }