Improve error messages for solver problems

main
Nils Adermann 12 years ago
parent 12abff8b4c
commit 5bea5974f7

@ -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 : '';
}
}

@ -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;

@ -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;

@ -356,4 +356,11 @@ interface PackageInterface
* @return string
*/
public function __toString();
/**
* Converts the package into a pretty readable string
*
* @return string
*/
public function getPrettyString();
}

Loading…
Cancel
Save