diff --git a/src/Composer/Package/LinkConstraint/VersionConstraint.php b/src/Composer/Package/LinkConstraint/VersionConstraint.php index 0e8a8c3b7..9bf5e515b 100644 --- a/src/Composer/Package/LinkConstraint/VersionConstraint.php +++ b/src/Composer/Package/LinkConstraint/VersionConstraint.php @@ -60,12 +60,27 @@ class VersionConstraint extends SpecificConstraint return version_compare($a, $b, $operator); } + public function matchSpecific(VersionConstraint $provider, $compareBranches = false) + { + static $c = array(); + if (isset($c[$this->operator][$this->version][$provider->operator][$provider->version][$compareBranches])) { + //if ($c[$this->operator][$this->version][$provider->operator][$provider->version][$compareBranches] != + // $this->_matchSpecific($provider, $compareBranches)) { + // throw new \Exception('Broken cache'); + //} + return $c[$this->operator][$this->version][$provider->operator][$provider->version][$compareBranches]; + } + + return $c[$this->operator][$this->version][$provider->operator][$provider->version][$compareBranches] = + $this->_matchSpecific($provider, $compareBranches); + } + /** * @param VersionConstraint $provider * @param bool $compareBranches * @return bool */ - public function matchSpecific(VersionConstraint $provider, $compareBranches = false) + public function _matchSpecific(VersionConstraint $provider, $compareBranches = false) { $noEqualOp = str_replace('=', '', $this->operator); $providerNoEqualOp = str_replace('=', '', $provider->operator);