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

Breadcrumb

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

function PoolOptimizer::keepPackage

Parameters

array<string, array<string, array<string, list<BasePackage>>>> $identicalDefinitionsPerPackage:

array<int, array<string, array{groupHash: string, dependencyHash: string}>> $packageIdenticalDefinitionLookup:

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

File

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

Class

PoolOptimizer
Optimizes a given pool

Namespace

Composer\DependencyResolver

Code

private function keepPackage(BasePackage $package, array $identicalDefinitionsPerPackage, array $packageIdenticalDefinitionLookup) : void {
    // Already marked to keep
    if (!isset($this->packagesToRemove[$package->id])) {
        return;
    }
    unset($this->packagesToRemove[$package->id]);
    if ($package instanceof AliasPackage) {
        // recursing here so aliasesPerPackage for the aliasOf can be checked
        // and all its aliases marked to be kept as well
        $this->keepPackage($package->getAliasOf(), $identicalDefinitionsPerPackage, $packageIdenticalDefinitionLookup);
    }
    // record all the versions of the package group so we can list them later in Problem output
    foreach ($package->getNames(false) as $name) {
        if (isset($packageIdenticalDefinitionLookup[$package->id][$name])) {
            $packageGroupPointers = $packageIdenticalDefinitionLookup[$package->id][$name];
            $packageGroup = $identicalDefinitionsPerPackage[$name][$packageGroupPointers['groupHash']][$packageGroupPointers['dependencyHash']];
            foreach ($packageGroup as $pkg) {
                if ($pkg instanceof AliasPackage && $pkg->getPrettyVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) {
                    $pkg = $pkg->getAliasOf();
                }
                $this->removedVersionsByPackage[spl_object_hash($package)][$pkg->getVersion()] = $pkg->getPrettyVersion();
            }
        }
    }
    if (isset($this->aliasesPerPackage[$package->id])) {
        foreach ($this->aliasesPerPackage[$package->id] as $aliasPackage) {
            unset($this->packagesToRemove[$aliasPackage->id]);
            // record all the versions of the package group so we can list them later in Problem output
            foreach ($aliasPackage->getNames(false) as $name) {
                if (isset($packageIdenticalDefinitionLookup[$aliasPackage->id][$name])) {
                    $packageGroupPointers = $packageIdenticalDefinitionLookup[$aliasPackage->id][$name];
                    $packageGroup = $identicalDefinitionsPerPackage[$name][$packageGroupPointers['groupHash']][$packageGroupPointers['dependencyHash']];
                    foreach ($packageGroup as $pkg) {
                        if ($pkg instanceof AliasPackage && $pkg->getPrettyVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) {
                            $pkg = $pkg->getAliasOf();
                        }
                        $this->removedVersionsByPackage[spl_object_hash($aliasPackage)][$pkg->getVersion()] = $pkg->getPrettyVersion();
                    }
                }
            }
        }
    }
}

API Navigation

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