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;