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

Breadcrumb

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

class RepositoryUtils

@author Jordi Boggiano <j.boggiano@seld.be>

Hierarchy

  • class \Composer\Repository\RepositoryUtils

Expanded class hierarchy of RepositoryUtils

See also

RepositorySet for ways to work with sets of repos

4 files declare their use of RepositoryUtils
AuditCommand.php in vendor/composer/composer/src/Composer/Command/AuditCommand.php
LicensesCommand.php in vendor/composer/composer/src/Composer/Command/LicensesCommand.php
PluginManager.php in vendor/composer/composer/src/Composer/Plugin/PluginManager.php
ShowCommand.php in vendor/composer/composer/src/Composer/Command/ShowCommand.php

File

vendor/composer/composer/src/Composer/Repository/RepositoryUtils.php, line 22

Namespace

Composer\Repository
View source
class RepositoryUtils {
    
    /**
     * Find all of $packages which are required by $requirer, either directly or transitively
     *
     * Require-dev is ignored by default, you can enable the require-dev of the initial $requirer
     * packages by passing $includeRequireDev=true, but require-dev of transitive dependencies
     * are always ignored.
     *
     * @template T of PackageInterface
     * @param  array<T> $packages
     * @param  list<T> $bucket Do not pass this in, only used to avoid recursion with circular deps
     * @return list<T>
     */
    public static function filterRequiredPackages(array $packages, PackageInterface $requirer, bool $includeRequireDev = false, array $bucket = []) : array {
        $requires = $requirer->getRequires();
        if ($includeRequireDev) {
            $requires = array_merge($requires, $requirer->getDevRequires());
        }
        foreach ($packages as $candidate) {
            foreach ($candidate->getNames() as $name) {
                if (isset($requires[$name])) {
                    if (!in_array($candidate, $bucket, true)) {
                        $bucket[] = $candidate;
                        $bucket = self::filterRequiredPackages($packages, $candidate, false, $bucket);
                    }
                    break;
                }
            }
        }
        return $bucket;
    }
    
    /**
     * Unwraps CompositeRepository, InstalledRepository and optionally FilterRepository to get a flat array of pure repository instances
     *
     * @return RepositoryInterface[]
     */
    public static function flattenRepositories(RepositoryInterface $repo, bool $unwrapFilterRepos = true) : array {
        // unwrap filter repos
        if ($unwrapFilterRepos && $repo instanceof FilterRepository) {
            $repo = $repo->getRepository();
        }
        if (!$repo instanceof CompositeRepository) {
            return [
                $repo,
            ];
        }
        $repos = [];
        foreach ($repo->getRepositories() as $r) {
            foreach (self::flattenRepositories($r, $unwrapFilterRepos) as $r2) {
                $repos[] = $r2;
            }
        }
        return $repos;
    }

}

Members

Title Sort descending Modifiers Object type Summary
RepositoryUtils::filterRequiredPackages public static function Find all of $packages which are required by $requirer, either directly or transitively
RepositoryUtils::flattenRepositories public static function Unwraps CompositeRepository, InstalledRepository and optionally FilterRepository to get a flat array of pure repository instances

API Navigation

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