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

Breadcrumb

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

function DefaultPolicy::selectPreferredPackages

Parameters

non-empty-list<int> $literals:

Return value

non-empty-list<int>

Overrides PolicyInterface::selectPreferredPackages

File

vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php, line 74

Class

DefaultPolicy
@author Nils Adermann <naderman@naderman.de> @author Jordi Boggiano <j.boggiano@seld.be>

Namespace

Composer\DependencyResolver

Code

public function selectPreferredPackages(Pool $pool, array $literals, ?string $requiredPackage = null) : array {
    sort($literals);
    $resultCacheKey = implode(',', $literals) . $requiredPackage;
    $poolId = spl_object_id($pool);
    if (isset($this->preferredPackageResultCachePerPool[$poolId][$resultCacheKey])) {
        return $this->preferredPackageResultCachePerPool[$poolId][$resultCacheKey];
    }
    $packages = $this->groupLiteralsByName($pool, $literals);
    foreach ($packages as &$nameLiterals) {
        usort($nameLiterals, function ($a, $b) use ($pool, $requiredPackage, $poolId) : int {
            $cacheKey = 'i' . $a . '.' . $b . $requiredPackage;
            // i prefix -> ignoreReplace = true
            if (isset($this->sortingCachePerPool[$poolId][$cacheKey])) {
                return $this->sortingCachePerPool[$poolId][$cacheKey];
            }
            return $this->sortingCachePerPool[$poolId][$cacheKey] = $this->compareByPriority($pool, $pool->literalToPackage($a), $pool->literalToPackage($b), $requiredPackage, true);
        });
    }
    foreach ($packages as &$sortedLiterals) {
        $sortedLiterals = $this->pruneToBestVersion($pool, $sortedLiterals);
        $sortedLiterals = $this->pruneRemoteAliases($pool, $sortedLiterals);
    }
    $selected = array_merge(...array_values($packages));
    // now sort the result across all packages to respect replaces across packages
    usort($selected, function ($a, $b) use ($pool, $requiredPackage, $poolId) : int {
        $cacheKey = $a . '.' . $b . $requiredPackage;
        // no i prefix -> ignoreReplace = false
        if (isset($this->sortingCachePerPool[$poolId][$cacheKey])) {
            return $this->sortingCachePerPool[$poolId][$cacheKey];
        }
        return $this->sortingCachePerPool[$poolId][$cacheKey] = $this->compareByPriority($pool, $pool->literalToPackage($a), $pool->literalToPackage($b), $requiredPackage);
    });
    return $this->preferredPackageResultCachePerPool[$poolId][$resultCacheKey] = $selected;
}

API Navigation

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