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

Breadcrumb

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

function Installer::extractDevPackages

Run the solver a second time on top of the existing update result with only the current result set in the pool and see what packages would get removed if we only had the non-dev packages in the solver request

@phpstan-param list<array{package: string, version: string, alias: string, alias_normalized: string}> $aliases @phpstan-return self::ERROR_*

Parameters

array<int, array<string, string>> $aliases:

1 call to Installer::extractDevPackages()
Installer::doUpdate in vendor/composer/composer/src/Composer/Installer.php
@phpstan-return self::ERROR_*

File

vendor/composer/composer/src/Composer/Installer.php, line 664

Class

Installer
@author Jordi Boggiano <j.boggiano@seld.be> @author Beau Simensen <beau@dflydev.com> @author Konstantin Kudryashov <ever.zet@gmail.com> @author Nils Adermann <naderman@naderman.de>

Namespace

Composer

Code

protected function extractDevPackages(LockTransaction $lockTransaction, PlatformRepository $platformRepo, array $aliases, PolicyInterface $policy, ?LockArrayRepository $lockedRepository = null) : int {
    if (!$this->package
        ->getDevRequires()) {
        return 0;
    }
    $resultRepo = new ArrayRepository([]);
    $loader = new ArrayLoader(null, true);
    $dumper = new ArrayDumper();
    foreach ($lockTransaction->getNewLockPackages(false) as $pkg) {
        $resultRepo->addPackage($loader->load($dumper->dump($pkg)));
    }
    $repositorySet = $this->createRepositorySet(true, $platformRepo, $aliases);
    $repositorySet->addRepository($resultRepo);
    $request = $this->createRequest($this->fixedRootPackage, $platformRepo);
    $this->requirePackagesForUpdate($request, $lockedRepository, false);
    $pool = $repositorySet->createPoolWithAllPackages();
    $solver = new Solver($policy, $pool, $this->io);
    try {
        $nonDevLockTransaction = $solver->solve($request, $this->platformRequirementFilter);
        $solver = null;
    } catch (SolverProblemsException $e) {
        $err = 'Unable to find a compatible set of packages based on your non-dev requirements alone.';
        $prettyProblem = $e->getPrettyString($repositorySet, $request, $pool, $this->io
            ->isVerbose(), true);
        $this->io
            ->writeError('<error>' . $err . '</error>', true, IOInterface::QUIET);
        $this->io
            ->writeError('Your requirements can be resolved successfully when require-dev packages are present.');
        $this->io
            ->writeError('You may need to move packages from require-dev or some of their dependencies to require.');
        $this->io
            ->writeError($prettyProblem);
        $ghe = new GithubActionError($this->io);
        $ghe->emit($err . "\n" . $prettyProblem);
        return $e->getCode();
    }
    $lockTransaction->setNonDevPackages($nonDevLockTransaction);
    return 0;
}

API Navigation

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