From f6f972a69909d159326f3b6d81c645bca317bfeb Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Thu, 19 Jan 2023 21:35:50 +0100 Subject: [PATCH] Fix require regression with --fixed, fixes #11247 --- src/Composer/Command/RequireCommand.php | 10 +++++--- .../Test/Command/RequireCommandTest.php | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Composer/Command/RequireCommand.php b/src/Composer/Command/RequireCommand.php index bf33b28c2..0ef69066a 100644 --- a/src/Composer/Command/RequireCommand.php +++ b/src/Composer/Command/RequireCommand.php @@ -338,7 +338,7 @@ EOT try { $result = $this->doUpdate($input, $output, $io, $requirements, $requireKey, $removeKey); if ($result === 0 && count($requirementsToGuess) > 0) { - $result = $this->updateRequirementsAfterResolution($requirementsToGuess, $requireKey, $removeKey, $sortPackages, $input->getOption('dry-run')); + $result = $this->updateRequirementsAfterResolution($requirementsToGuess, $requireKey, $removeKey, $sortPackages, $input->getOption('dry-run'), $input->getOption('fixed')); } return $result; @@ -506,7 +506,7 @@ EOT /** * @param list $requirementsToUpdate */ - private function updateRequirementsAfterResolution(array $requirementsToUpdate, string $requireKey, string $removeKey, bool $sortPackages, bool $dryRun): int + private function updateRequirementsAfterResolution(array $requirementsToUpdate, string $requireKey, string $removeKey, bool $sortPackages, bool $dryRun, bool $fixed): int { $composer = $this->requireComposer(); $locker = $composer->getLocker(); @@ -523,7 +523,11 @@ EOT continue; } - $requirements[$packageName] = $versionSelector->findRecommendedRequireVersion($package); + if ($fixed) { + $requirements[$packageName] = $package->getPrettyVersion(); + } else { + $requirements[$packageName] = $versionSelector->findRecommendedRequireVersion($package); + } $this->getIO()->writeError(sprintf( 'Using version %s for %s', $requirements[$packageName], diff --git a/tests/Composer/Test/Command/RequireCommandTest.php b/tests/Composer/Test/Command/RequireCommandTest.php index f85999214..c819a3529 100644 --- a/tests/Composer/Test/Command/RequireCommandTest.php +++ b/tests/Composer/Test/Command/RequireCommandTest.php @@ -236,6 +236,30 @@ Lock file operations: 2 installs, 0 updates, 0 removals - Locking existing/dep (1.1.0) - Locking required/pkg (1.1.0) Using version ^1.1 for required/pkg +OUTPUT + ]; + + yield 'use exact constraint with --fixed' => [ + [ + 'type' => 'project', + 'repositories' => [ + 'packages' => [ + 'type' => 'package', + 'package' => [ + ['name' => 'required/pkg', 'version' => '1.1.0'], + ], + ], + ], + ], + ['packages' => ['required/pkg'], '--no-install' => true, '--fixed' => true], + <<