示例#1
0
 public function getPrettyString(Pool $pool, array $installedMap = array())
 {
     $ruleText = '';
     foreach ($this->literals as $i => $literal) {
         if ($i != 0) {
             $ruleText .= '|';
         }
         $ruleText .= $pool->literalToPrettyString($literal, $installedMap);
     }
     switch ($this->getReason()) {
         case self::RULE_INTERNAL_ALLOW_UPDATE:
             return $ruleText;
         case self::RULE_JOB_INSTALL:
             return "Install command rule ({$ruleText})";
         case self::RULE_JOB_REMOVE:
             return "Remove command rule ({$ruleText})";
         case self::RULE_PACKAGE_CONFLICT:
             $package1 = $pool->literalToPackage($this->literals[0]);
             $package2 = $pool->literalToPackage($this->literals[1]);
             return $package1->getPrettyString() . ' conflicts with ' . $this->formatPackagesUnique($pool, array($package2)) . '.';
         case self::RULE_PACKAGE_REQUIRES:
             $literals = $this->literals;
             $sourceLiteral = array_shift($literals);
             $sourcePackage = $pool->literalToPackage($sourceLiteral);
             $requires = array();
             foreach ($literals as $literal) {
                 $requires[] = $pool->literalToPackage($literal);
             }
             $text = $this->reasonData->getPrettyString($sourcePackage);
             if ($requires) {
                 $text .= ' -> satisfiable by ' . $this->formatPackagesUnique($pool, $requires) . '.';
             } else {
                 $targetName = $this->reasonData->getTarget();
                 if ($targetName === 'php' || $targetName === 'php-64bit' || $targetName === 'hhvm') {
                     // handle php/hhvm
                     if (defined('HHVM_VERSION')) {
                         return $text . ' -> your HHVM version does not satisfy that requirement.';
                     } elseif ($targetName === 'hhvm') {
                         return $text . ' -> you are running this with PHP and not HHVM.';
                     } else {
                         $packages = $pool->whatProvides($targetName);
                         $package = count($packages) ? current($packages) : phpversion();
                         if (!$package instanceof CompletePackage) {
                             return $text . ' -> your PHP version (' . phpversion() . ') does not satisfy that requirement.';
                         }
                         $extra = $package->getExtra();
                         if (!empty($extra['config.platform'])) {
                             $text .= ' -> your PHP version (' . phpversion() . ') overriden by "config.platform.php" version (' . $package->getPrettyVersion() . ') does not satisfy that requirement.';
                         } else {
                             $text .= ' -> your PHP version (' . $package->getPrettyVersion() . ') does not satisfy that requirement.';
                         }
                         return $text;
                     }
                 } elseif (0 === strpos($targetName, 'ext-')) {
                     // handle php extensions
                     $ext = substr($targetName, 4);
                     $error = extension_loaded($ext) ? 'has the wrong version (' . (phpversion($ext) ?: '0') . ') installed' : 'is missing from your system';
                     return $text . ' -> the requested PHP extension ' . $ext . ' ' . $error . '.';
                 } elseif (0 === strpos($targetName, 'lib-')) {
                     // handle linked libs
                     $lib = substr($targetName, 4);
                     return $text . ' -> the requested linked library ' . $lib . ' has the wrong version installed or is missing from your system, make sure to have the extension providing it.';
                 } else {
                     return $text . ' -> no matching package found.';
                 }
             }
             return $text;
         case self::RULE_PACKAGE_OBSOLETES:
             return $ruleText;
         case self::RULE_INSTALLED_PACKAGE_OBSOLETES:
             return $ruleText;
         case self::RULE_PACKAGE_SAME_NAME:
             return 'Can only install one of: ' . $this->formatPackagesUnique($pool, $this->literals) . '.';
         case self::RULE_PACKAGE_IMPLICIT_OBSOLETES:
             return $ruleText;
         case self::RULE_LEARNED:
             return 'Conclusion: ' . $ruleText;
         case self::RULE_PACKAGE_ALIAS:
             return $ruleText;
         default:
             return '(' . $ruleText . ')';
     }
 }