* Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Repository; /** * Repositories manager. * * @author Jordi Boggiano * @author Konstantin Kudryashov */ class RepositoryManager { private $localRepository; private $repositories = array(); private $repositoryClasses = array(); /** * Searches for a package by it's name and version in managed repositories. * * @param string $name package name * @param string $version package version * * @return PackageInterface|null */ public function findPackage($name, $version) { foreach ($this->repositories as $repository) { if ($package = $repository->findPackage($name, $version)) { return $package; } } } /** * Adds repository * * @param RepositoryInterface $repository repository instance */ public function addRepository(RepositoryInterface $repository) { $this->repositories[] = $repository; } /** * Returns repository class for a specific installation type. * * @param string $type installation type * * @return RepositoryInterface * * @throws InvalidArgumentException if repository for provided type is not registeterd */ public function getRepositoryClass($type) { if (!isset($this->repositoryClasses[$type])) { throw new \InvalidArgumentException('Repository type is not registered: '.$type); } return $this->repositoryClasses[$type]; } /** * Stores repository class for a specific installation type. * * @param string $type installation type * @param string $class class name of the repo implementation */ public function setRepositoryClass($type, $class) { $this->repositoryClasses[$type] = $class; } /** * Returns all repositories, except local one. * * @return array */ public function getRepositories() { return $this->repositories; } /** * Sets local repository for the project. * * @param RepositoryInterface $repository repository instance */ public function setLocalRepository(RepositoryInterface $repository) { $this->localRepository = $repository; } /** * Returns local repository for the project. * * @return RepositoryInterface */ public function getLocalRepository() { return $this->localRepository; } }