Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a844fce

Browse files
committed
Fix handling of inline-update-constraints with refs or stability flags, fixes #9847
1 parent a677d3e commit a844fce

2 files changed

Lines changed: 18 additions & 8 deletions

File tree

src/Composer/Command/UpdateCommand.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Composer\DependencyResolver\Request;
1717
use Composer\Installer;
1818
use Composer\IO\IOInterface;
19+
use Composer\Package\Loader\RootPackageLoader;
1920
use Composer\Plugin\CommandEvent;
2021
use Composer\Plugin\PluginEvents;
2122
use Composer\Package\Version\VersionParser;
@@ -139,8 +140,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
139140
}
140141
}
141142

142-
$rootRequires = $composer->getPackage()->getRequires();
143-
$rootDevRequires = $composer->getPackage()->getDevRequires();
143+
$rootPackage = $composer->getPackage();
144+
$rootRequires = $rootPackage->getRequires();
145+
$rootDevRequires = $rootPackage->getDevRequires();
144146
foreach ($reqs as $package => $constraint) {
145147
if (isset($rootRequires[$package])) {
146148
$rootRequires[$package] = $this->appendConstraintToLink($rootRequires[$package], $constraint);
@@ -150,8 +152,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
150152
throw new \UnexpectedValueException('Only root package requirements can receive temporary constraints and '.$package.' is not one');
151153
}
152154
}
153-
$composer->getPackage()->setRequires($rootRequires);
154-
$composer->getPackage()->setDevRequires($rootDevRequires);
155+
$rootPackage->setRequires($rootRequires);
156+
$rootPackage->setDevRequires($rootDevRequires);
157+
$rootPackage->setReferences(RootPackageLoader::extractReferences($reqs, $rootPackage->getReferences()));
158+
$rootPackage->setStabilityFlags(RootPackageLoader::extractStabilityFlags($reqs, $rootPackage->getMinimumStability(), $rootPackage->getStabilityFlags()));
155159

156160
if ($input->getOption('interactive')) {
157161
$packages = $this->getPackagesInteractively($io, $input, $output, $composer, $packages);

src/Composer/Package/Loader/RootPackageLoader.php

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ public function load(array $config, $class = 'Composer\Package\RootPackage', $cw
130130
$links[$link->getTarget()] = $link->getConstraint()->getPrettyString();
131131
}
132132
$aliases = $this->extractAliases($links, $aliases);
133-
$stabilityFlags = $this->extractStabilityFlags($links, $stabilityFlags, $realPackage->getMinimumStability());
134-
$references = $this->extractReferences($links, $references);
133+
$stabilityFlags = self::extractStabilityFlags($links, $realPackage->getMinimumStability(), $stabilityFlags);
134+
$references = self::extractReferences($links, $references);
135135

136136
if (isset($links[$config['name']])) {
137137
throw new \RuntimeException(sprintf('Root package \'%s\' cannot require itself in its composer.json' . PHP_EOL .
@@ -189,7 +189,10 @@ private function extractAliases(array $requires, array $aliases)
189189
return $aliases;
190190
}
191191

192-
private function extractStabilityFlags(array $requires, array $stabilityFlags, $minimumStability)
192+
/**
193+
* @internal
194+
*/
195+
public static function extractStabilityFlags(array $requires, $minimumStability, array $stabilityFlags)
193196
{
194197
$stabilities = BasePackage::$stabilities;
195198
$minimumStability = $stabilities[$minimumStability];
@@ -242,7 +245,10 @@ private function extractStabilityFlags(array $requires, array $stabilityFlags, $
242245
return $stabilityFlags;
243246
}
244247

245-
private function extractReferences(array $requires, array $references)
248+
/**
249+
* @internal
250+
*/
251+
public static function extractReferences(array $requires, array $references)
246252
{
247253
foreach ($requires as $reqName => $reqVersion) {
248254
$reqVersion = preg_replace('{^([^,\s@]+) as .+$}', '$1', $reqVersion);

0 commit comments

Comments
 (0)