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
ComposerCode
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;
}