public function testMultiVersionMatchFails()
 {
     $versionRequireStart = new VersionConstraint('>', '1.0');
     $versionRequireEnd = new VersionConstraint('<', '1.2');
     $versionProvide = new VersionConstraint('==', '1.2');
     $multiRequire = new MultiConstraint(array($versionRequireStart, $versionRequireEnd));
     $this->assertFalse($multiRequire->matches($versionProvide));
 }
 /**
  * Check if CakePHP version matches against a version
  *
  * @param string $matcher
  * @param string $version
  * @return bool
  */
 protected function matchesCakeVersion($matcher, $version)
 {
     $repositoryManager = $this->composer->getRepositoryManager();
     if ($repositoryManager) {
         $repos = $repositoryManager->getLocalRepository();
         if (!$repos) {
             return false;
         }
         $cake3 = new MultiConstraint(array(new VersionConstraint($matcher, $version), new VersionConstraint('!=', '9999999-dev')));
         $pool = new Pool('dev');
         $pool->addRepository($repos);
         $packages = $pool->whatProvides('cakephp/cakephp');
         foreach ($packages as $package) {
             $installed = new VersionConstraint('=', $package->getVersion());
             if ($cake3->matches($installed)) {
                 return true;
                 break;
             }
         }
     }
     return false;
 }
 /**
  * Change the default plugin location when cakephp >= 3.0
  */
 public function getLocations()
 {
     $repositoryManager = $this->composer->getRepositoryManager();
     if ($repositoryManager) {
         $repos = $repositoryManager->getLocalRepository();
         if (!$repos) {
             return $this->locations;
         }
         $cake3 = new MultiConstraint(array(new VersionConstraint('>=', '3.0.0'), new VersionConstraint('!=', '9999999-dev')));
         $pool = new Pool('dev');
         $pool->addRepository($repos);
         $packages = $pool->whatProvides('cakephp/cakephp');
         foreach ($packages as $package) {
             $installed = new VersionConstraint('=', $package->getVersion());
             if ($cake3->matches($installed)) {
                 $this->locations['plugin'] = 'plugins/{$name}/';
                 break;
             }
         }
     }
     return $this->locations;
 }
 /**
  * Parses as constraint string into LinkConstraint objects
  *
  * @param  string                                                   $constraints
  * @return \Composer\Package\LinkConstraint\LinkConstraintInterface
  */
 public function parseConstraints($constraints)
 {
     $prettyConstraint = $constraints;
     if (preg_match('{^([^,\\s]*?)@(' . implode('|', array_keys(BasePackage::$stabilities)) . ')$}i', $constraints, $match)) {
         $constraints = empty($match[1]) ? '*' : $match[1];
     }
     if (preg_match('{^(dev-[^,\\s@]+?|[^,\\s@]+?\\.x-dev)#[a-f0-9]+$}i', $constraints, $match)) {
         $constraints = $match[1];
     }
     $constraints = preg_split('{\\s*,\\s*}', trim($constraints));
     if (count($constraints) > 1) {
         $constraintObjects = array();
         foreach ($constraints as $constraint) {
             $constraintObjects = array_merge($constraintObjects, $this->parseConstraint($constraint));
         }
     } else {
         $constraintObjects = $this->parseConstraint($constraints[0]);
     }
     if (1 === count($constraintObjects)) {
         $constraint = $constraintObjects[0];
     } else {
         $constraint = new MultiConstraint($constraintObjects);
     }
     $constraint->setPrettyString($prettyConstraint);
     return $constraint;
 }
Exemple #5
0
 /**
  * Parses as constraint string into LinkConstraint objects
  *
  * @param  string                                                   $constraints
  * @return \Composer\Package\LinkConstraint\LinkConstraintInterface
  */
 public function parseConstraints($constraints)
 {
     $prettyConstraint = $constraints;
     if (preg_match('{^([^,\\s]*?)@(' . implode('|', array_keys(BasePackage::$stabilities)) . ')$}i', $constraints, $match)) {
         $constraints = empty($match[1]) ? '*' : $match[1];
     }
     if (preg_match('{^(dev-[^,\\s@]+?|[^,\\s@]+?\\.x-dev)#.+$}i', $constraints, $match)) {
         $constraints = $match[1];
     }
     $orConstraints = preg_split('{\\s*\\|\\|?\\s*}', trim($constraints));
     $orGroups = array();
     foreach ($orConstraints as $constraints) {
         $andConstraints = preg_split('{(?<!^|as|[=>< ,]) *(?<!-)[, ](?!-) *(?!,|as|$)}', $constraints);
         if (count($andConstraints) > 1) {
             $constraintObjects = array();
             foreach ($andConstraints as $constraint) {
                 $constraintObjects = array_merge($constraintObjects, $this->parseConstraint($constraint));
             }
         } else {
             $constraintObjects = $this->parseConstraint($andConstraints[0]);
         }
         if (1 === count($constraintObjects)) {
             $constraint = $constraintObjects[0];
         } else {
             $constraint = new MultiConstraint($constraintObjects);
         }
         $orGroups[] = $constraint;
     }
     if (1 === count($orGroups)) {
         $constraint = $orGroups[0];
     } else {
         $constraint = new MultiConstraint($orGroups, false);
     }
     $constraint->setPrettyString($prettyConstraint);
     return $constraint;
 }
 /**
  * Include the constraint of root dependency version in the constraint
  * of installed package.
  *
  * @param PackageInterface $package The installed package
  * @param Link             $link    The link contained installed constraint
  *
  * @return Link The link with root and installed version constraint
  */
 private function includeRootConstraint(PackageInterface $package, Link $link)
 {
     if (isset($this->requires[$package->getName()])) {
         /* @var Link $rLink */
         $rLink = $this->requires[$package->getName()];
         $useConjunctive = FilterUtil::checkExtraOption($this->package, 'asset-optimize-with-conjunctive');
         $constraint = new MultiConstraint(array($rLink->getConstraint(), $link->getConstraint()), $useConjunctive);
         $link = new Link($rLink->getSource(), $rLink->getTarget(), $constraint, 'installed', $constraint->getPrettyString());
     }
     return $link;
 }