diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 0ad433c90..0eed0050a 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -180,7 +180,9 @@ class Installer $updatedLock = $this->locker->setLockData( $this->repositoryManager->getLocalRepository()->getPackages(), $this->devMode ? $this->repositoryManager->getLocalDevRepository()->getPackages() : null, - $aliases + $aliases, + $this->package->getMinimumStability(), + $this->package->getStabilityFlags() ); if ($updatedLock) { $this->io->write('Writing lock file'); @@ -202,13 +204,18 @@ class Installer protected function doInstall($localRepo, $installedRepo, $aliases, $devMode = false) { + $minimumStability = $this->package->getMinimumStability(); + $stabilityFlags = $this->package->getStabilityFlags(); + // initialize locker to create aliased packages if (!$this->update && $this->locker->isLocked($devMode)) { $lockedPackages = $this->locker->getLockedPackages($devMode); + $minimumStability = $this->locker->getMinimumStability(); + $stabilityFlags = $this->locker->getStabilityFlags(); } // creating repository pool - $pool = new Pool($this->package->getMinimumStability(), $this->package->getStabilityFlags()); + $pool = new Pool($minimumStability, $stabilityFlags); $pool->addRepository($installedRepo); foreach ($this->repositoryManager->getRepositories() as $repository) { $pool->addRepository($repository); diff --git a/src/Composer/Package/Locker.php b/src/Composer/Package/Locker.php index 7f6b738f6..d7502bfdb 100644 --- a/src/Composer/Package/Locker.php +++ b/src/Composer/Package/Locker.php @@ -82,10 +82,10 @@ class Locker */ public function getLockedPackages($dev = false) { - $lockList = $this->getLockData(); + $lockData = $this->getLockData(); $packages = array(); - $lockedPackages = $dev ? $lockList['packages-dev'] : $lockList['packages']; + $lockedPackages = $dev ? $lockData['packages-dev'] : $lockData['packages']; $repo = $dev ? $this->repositoryManager->getLocalDevRepository() : $this->repositoryManager->getLocalRepository(); foreach ($lockedPackages as $info) { @@ -128,22 +128,38 @@ class Locker return $packages; } + public function getMinimumStability() + { + $lockData = $this->getLockData(); + + // TODO BC change dev to stable end of june? + return isset($lockData['minimum-stability']) ? $lockData['minimum-stability'] : 'dev'; + } + + public function getStabilityFlags() + { + $lockData = $this->getLockData(); + + return isset($lockData['stability-flags']) ? $lockData['stability-flags'] : array(); + } + public function getAliases() { - $lockList = $this->getLockData(); - return isset($lockList['aliases']) ? $lockList['aliases'] : array(); + $lockData = $this->getLockData(); + + return isset($lockData['aliases']) ? $lockData['aliases'] : array(); } public function getLockData() { - if (!$this->lockFile->exists()) { - throw new \LogicException('No lockfile found. Unable to read locked packages'); - } - if (null !== $this->lockDataCache) { return $this->lockDataCache; } + if (!$this->lockFile->exists()) { + throw new \LogicException('No lockfile found. Unable to read locked packages'); + } + return $this->lockDataCache = $this->lockFile->read(); } @@ -156,13 +172,15 @@ class Locker * * @return Boolean */ - public function setLockData(array $packages, $devPackages, array $aliases) + public function setLockData(array $packages, $devPackages, array $aliases, $minimumStability, array $stabilityFlags) { $lock = array( 'hash' => $this->hash, 'packages' => null, 'packages-dev' => null, 'aliases' => $aliases, + 'minimum-stability' => $minimumStability, + 'stability-flags' => $stabilityFlags, ); $lock['packages'] = $this->lockPackages($packages); diff --git a/tests/Composer/Test/Package/LockerTest.php b/tests/Composer/Test/Package/LockerTest.php index 729da4b93..a67beb277 100644 --- a/tests/Composer/Test/Package/LockerTest.php +++ b/tests/Composer/Test/Package/LockerTest.php @@ -157,9 +157,11 @@ class LockerTest extends \PHPUnit_Framework_TestCase ), 'packages-dev' => array(), 'aliases' => array(), + 'minimum-stability' => 'dev', + 'stability-flags' => array(), )); - $locker->setLockData(array($package1, $package2), array(), array()); + $locker->setLockData(array($package1, $package2), array(), array(), 'dev', array()); } public function testLockBadPackages() @@ -177,7 +179,7 @@ class LockerTest extends \PHPUnit_Framework_TestCase $this->setExpectedException('LogicException'); - $locker->setLockData(array($package1), array(), array()); + $locker->setLockData(array($package1), array(), array(), 'dev', array()); } public function testIsFresh()