diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index d656ad5d1..86552362b 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -113,6 +113,7 @@ EOT } // creating requirements request + $installFromLock = false; $request = new Request($pool); if ($update) { $io->write('Updating dependencies'); @@ -130,6 +131,7 @@ EOT $request->install($link->getTarget(), $link->getConstraint()); } } elseif ($composer->getLocker()->isLocked()) { + $installFromLock = true; $io->write('Installing from lock file'); if (!$composer->getLocker()->isFresh()) { @@ -196,7 +198,25 @@ EOT } if (!$dryRun) { $eventDispatcher->dispatchPackageEvent(constant('Composer\Script\ScriptEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType())), $operation); + + // if installing from lock, restore dev packages' references to their locked state + if ($installFromLock) { + $package = null; + if ('update' === $operation->getJobType()) { + $package = $operation->getTargetPackage(); + } elseif ('install' === $operation->getJobType()) { + $package = $operation->getPackage(); + } + if ($package && $package->isDev()) { + foreach ($composer->getLocker()->getLockedPackages() as $lockedPackage) { + if (!empty($lockedPackage['source_reference']) && strtolower($lockedPackage['package']) === $package->getName()) { + $package->setSourceReference($lockedPackage['source_reference']); + } + } + } + } $installationManager->execute($operation); + $eventDispatcher->dispatchPackageEvent(constant('Composer\Script\ScriptEvents::POST_PACKAGE_'.strtoupper($operation->getJobType())), $operation); } } diff --git a/src/Composer/Package/Locker.php b/src/Composer/Package/Locker.php index 09a187313..39a299873 100644 --- a/src/Composer/Package/Locker.php +++ b/src/Composer/Package/Locker.php @@ -119,7 +119,7 @@ class Locker $spec = array('package' => $name, 'version' => $version); if ($package->isDev()) { - $spec['reference'] = $package->getSourceReference(); + $spec['source_reference'] = $package->getSourceReference(); } $lock['packages'][] = $spec;