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

Breadcrumb

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

function PoolOptimizer::prepare

1 call to PoolOptimizer::prepare()
PoolOptimizer::optimize in vendor/composer/composer/src/Composer/DependencyResolver/PoolOptimizer.php

File

vendor/composer/composer/src/Composer/DependencyResolver/PoolOptimizer.php, line 96

Class

PoolOptimizer
Optimizes a given pool

Namespace

Composer\DependencyResolver

Code

private function prepare(Request $request, Pool $pool) : void {
    $irremovablePackageConstraintGroups = [];
    // Mark fixed or locked packages as irremovable
    foreach ($request->getFixedOrLockedPackages() as $package) {
        $irremovablePackageConstraintGroups[$package->getName()][] = new Constraint('==', $package->getVersion());
    }
    // Extract requested package requirements
    foreach ($request->getRequires() as $require => $constraint) {
        $this->extractRequireConstraintsPerPackage($require, $constraint);
    }
    // First pass over all packages to extract information and mark package constraints irremovable
    foreach ($pool->getPackages() as $package) {
        // Extract package requirements
        foreach ($package->getRequires() as $link) {
            $this->extractRequireConstraintsPerPackage($link->getTarget(), $link->getConstraint());
        }
        // Extract package conflicts
        foreach ($package->getConflicts() as $link) {
            $this->extractConflictConstraintsPerPackage($link->getTarget(), $link->getConstraint());
        }
        // Keep track of alias packages for every package so if either the alias or aliased is kept
        // we keep the others as they are a unit of packages really
        if ($package instanceof AliasPackage) {
            $this->aliasesPerPackage[$package->getAliasOf()->id][] = $package;
        }
    }
    $irremovablePackageConstraints = [];
    foreach ($irremovablePackageConstraintGroups as $packageName => $constraints) {
        $irremovablePackageConstraints[$packageName] = 1 === \count($constraints) ? $constraints[0] : new MultiConstraint($constraints, false);
    }
    unset($irremovablePackageConstraintGroups);
    // Mark the packages as irremovable based on the constraints
    foreach ($pool->getPackages() as $package) {
        if (!isset($irremovablePackageConstraints[$package->getName()])) {
            continue;
        }
        if (CompilingMatcher::match($irremovablePackageConstraints[$package->getName()], Constraint::OP_EQ, $package->getVersion())) {
            $this->markPackageIrremovable($package);
        }
    }
}

API Navigation

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