diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index 098ff8819..23867ddef 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -132,76 +132,6 @@ class ComposerRepository extends ArrayRepository return $loadedPackages; } - protected function loadName($name, $acceptableCallback, $exactMatch = true) - { - // skip platform packages - if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $name) || '__root__' === $name) { - return array(); - } - - if (null === $this->providerListing) { - $this->loadProviderListings($this->loadRootServerFile()); - } - - if ($this->lazyProvidersUrl && !isset($this->providerListing[$name])) { - $hash = null; - $url = str_replace('%package%', $name, $this->lazyProvidersUrl); - $cacheKey = false; - } elseif ($this->providersUrl) { - // package does not exist in this repo - if (!isset($this->providerListing[$name])) { - return array(); - } - - $hash = $this->providerListing[$name]['sha256']; - $url = str_replace(array('%package%', '%hash%'), array($name, $hash), $this->providersUrl); - $cacheKey = 'provider-'.strtr($name, '/', '$').'.json'; - } else { - // BC handling for old providers-includes - $url = 'p/'.$name.'.json'; - - // package does not exist in this repo - if (!isset($this->providerListing[$url])) { - return array(); - } - $hash = $this->providerListing[$url]['sha256']; - $cacheKey = null; - } - - if ($cacheKey && $this->cache->sha256($cacheKey) === $hash) { - $packages = json_decode($this->cache->read($cacheKey), true); - } else { - $packages = $this->fetchFile($url, $cacheKey, $hash); - } - - $loadedPackages = array(); - foreach ($packages['packages'] as $versions) { - foreach ($versions as $version) { - if ($exactMatch && $version['name'] !== $name) { - continue; - } - - if ($acceptableCallback && !call_user_func( - $acceptableCallback, strtolower($version['name']), VersionParser::parseStability($version['version']) - )) { - continue; - } - - // load acceptable packages in the providers - $package = $this->createPackage($version, 'Composer\Package\Package'); - $this->addPackage($package); - - $loadedPackages[] = $package; - - if ($package instanceof AliasPackage) { - $loadedPackages[] = $package->getAliasOf(); - } - } - } - - return $loadedPackages; - } - /** * {@inheritDoc} */ @@ -328,6 +258,86 @@ class ComposerRepository extends ArrayRepository return $providers; } + /** + * Loads package data for a given package name or provider name + * + * @param string $name + * @param callable $acceptableCallback A callback to check if a package should be loaded + * @param bool $exactMatch Whether packages only providing the name should be ignored + * + * @return array All packages that were loaded + */ + protected function loadName($name, $acceptableCallback, $exactMatch = true) + { + // skip platform packages + if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $name) || '__root__' === $name) { + return array(); + } + + if (null === $this->providerListing) { + $this->loadProviderListings($this->loadRootServerFile()); + } + + if ($this->lazyProvidersUrl && !isset($this->providerListing[$name])) { + $hash = null; + $url = str_replace('%package%', $name, $this->lazyProvidersUrl); + $cacheKey = false; + } elseif ($this->providersUrl) { + // package does not exist in this repo + if (!isset($this->providerListing[$name])) { + return array(); + } + + $hash = $this->providerListing[$name]['sha256']; + $url = str_replace(array('%package%', '%hash%'), array($name, $hash), $this->providersUrl); + $cacheKey = 'provider-'.strtr($name, '/', '$').'.json'; + } else { + // BC handling for old providers-includes + $url = 'p/'.$name.'.json'; + + // package does not exist in this repo + if (!isset($this->providerListing[$url])) { + return array(); + } + $hash = $this->providerListing[$url]['sha256']; + $cacheKey = null; + } + + if ($cacheKey && $this->cache->sha256($cacheKey) === $hash) { + $packages = json_decode($this->cache->read($cacheKey), true); + } else { + $packages = $this->fetchFile($url, $cacheKey, $hash); + } + + $loadedPackages = array(); + foreach ($packages['packages'] as $versions) { + foreach ($versions as $version) { + if ($exactMatch && $version['name'] !== $name) { + continue; + } + + if ($acceptableCallback && !call_user_func( + $acceptableCallback, strtolower($version['name']), VersionParser::parseStability($version['version']) + )) { + continue; + } + + // load acceptable packages in the providers + $package = $this->createPackage($version, 'Composer\Package\Package'); + $this->addPackage($package); + + $loadedPackages[] = $package; + + if ($package instanceof AliasPackage) { + $loadedPackages[] = $package->getAliasOf(); + } + } + } + + return $loadedPackages; + } + + protected function configurePackageTransportOptions(PackageInterface $package) { foreach ($package->getDistUrls() as $url) {