Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. CompositeRepository.php

class CompositeRepository

Composite repository.

@author Beau Simensen <beau@dflydev.com>

Hierarchy

  • class \Composer\Repository\CompositeRepository implements \Composer\Repository\RepositoryInterface

Expanded class hierarchy of CompositeRepository

12 files declare their use of CompositeRepository
ArchiveCommand.php in vendor/composer/composer/src/Composer/Command/ArchiveCommand.php
BaseDependencyCommand.php in vendor/composer/composer/src/Composer/Command/BaseDependencyCommand.php
CompletionTrait.php in vendor/composer/composer/src/Composer/Command/CompletionTrait.php
CreateProjectCommand.php in vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php
FundCommand.php in vendor/composer/composer/src/Composer/Command/FundCommand.php

... See full list

File

vendor/composer/composer/src/Composer/Repository/CompositeRepository.php, line 23

Namespace

Composer\Repository
View source
class CompositeRepository implements RepositoryInterface {
    
    /**
     * List of repositories
     * @var RepositoryInterface[]
     */
    private $repositories;
    
    /**
     * Constructor
     * @param RepositoryInterface[] $repositories
     */
    public function __construct(array $repositories) {
        $this->repositories = [];
        foreach ($repositories as $repo) {
            $this->addRepository($repo);
        }
    }
    public function getRepoName() : string {
        return 'composite repo (' . implode(', ', array_map(static function ($repo) : string {
            return $repo->getRepoName();
        }, $this->repositories)) . ')';
    }
    
    /**
     * Returns all the wrapped repositories
     *
     * @return RepositoryInterface[]
     */
    public function getRepositories() : array {
        return $this->repositories;
    }
    
    /**
     * @inheritDoc
     */
    public function hasPackage(PackageInterface $package) : bool {
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            if ($repository->hasPackage($package)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * @inheritDoc
     */
    public function findPackage($name, $constraint) : ?BasePackage {
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $package = $repository->findPackage($name, $constraint);
            if (null !== $package) {
                return $package;
            }
        }
        return null;
    }
    
    /**
     * @inheritDoc
     */
    public function findPackages($name, $constraint = null) : array {
        $packages = [];
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $packages[] = $repository->findPackages($name, $constraint);
        }
        return $packages ? array_merge(...$packages) : [];
    }
    
    /**
     * @inheritDoc
     */
    public function loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = []) : array {
        $packages = [];
        $namesFound = [];
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $result = $repository->loadPackages($packageNameMap, $acceptableStabilities, $stabilityFlags, $alreadyLoaded);
            $packages[] = $result['packages'];
            $namesFound[] = $result['namesFound'];
        }
        return [
            'packages' => $packages ? array_merge(...$packages) : [],
            'namesFound' => $namesFound ? array_unique(array_merge(...$namesFound)) : [],
        ];
    }
    
    /**
     * @inheritDoc
     */
    public function search(string $query, int $mode = 0, ?string $type = null) : array {
        $matches = [];
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $matches[] = $repository->search($query, $mode, $type);
        }
        return \count($matches) > 0 ? array_merge(...$matches) : [];
    }
    
    /**
     * @inheritDoc
     */
    public function getPackages() : array {
        $packages = [];
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $packages[] = $repository->getPackages();
        }
        return $packages ? array_merge(...$packages) : [];
    }
    
    /**
     * @inheritDoc
     */
    public function getProviders($packageName) : array {
        $results = [];
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $results[] = $repository->getProviders($packageName);
        }
        return $results ? array_merge(...$results) : [];
    }
    public function removePackage(PackageInterface $package) : void {
        foreach ($this->repositories as $repository) {
            if ($repository instanceof WritableRepositoryInterface) {
                $repository->removePackage($package);
            }
        }
    }
    
    /**
     * @inheritDoc
     */
    public function count() : int {
        $total = 0;
        foreach ($this->repositories as $repository) {
            
            /* @var $repository RepositoryInterface */
            $total += $repository->count();
        }
        return $total;
    }
    
    /**
     * Add a repository.
     */
    public function addRepository(RepositoryInterface $repository) : void {
        if ($repository instanceof self) {
            foreach ($repository->getRepositories() as $repo) {
                $this->addRepository($repo);
            }
        }
        else {
            $this->repositories[] = $repository;
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
CompositeRepository::$repositories private property List of repositories
CompositeRepository::addRepository public function Add a repository. 1
CompositeRepository::count public function @inheritDoc
CompositeRepository::findPackage public function @inheritDoc Overrides RepositoryInterface::findPackage
CompositeRepository::findPackages public function @inheritDoc Overrides RepositoryInterface::findPackages
CompositeRepository::getPackages public function @inheritDoc Overrides RepositoryInterface::getPackages
CompositeRepository::getProviders public function @inheritDoc Overrides RepositoryInterface::getProviders
CompositeRepository::getRepoName public function Returns a name representing this repository to the user Overrides RepositoryInterface::getRepoName 1
CompositeRepository::getRepositories public function Returns all the wrapped repositories
CompositeRepository::hasPackage public function @inheritDoc Overrides RepositoryInterface::hasPackage
CompositeRepository::loadPackages public function @inheritDoc Overrides RepositoryInterface::loadPackages
CompositeRepository::removePackage public function
CompositeRepository::search public function @inheritDoc Overrides RepositoryInterface::search
CompositeRepository::__construct public function Constructor
RepositoryInterface::SEARCH_FULLTEXT public constant
RepositoryInterface::SEARCH_NAME public constant
RepositoryInterface::SEARCH_VENDOR public constant

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal