diff --git a/src/Composer/Command/ReinstallCommand.php b/src/Composer/Command/ReinstallCommand.php index 3143fc50c32a..76e2f0294647 100644 --- a/src/Composer/Command/ReinstallCommand.php +++ b/src/Composer/Command/ReinstallCommand.php @@ -21,6 +21,8 @@ use Composer\Pcre\Preg; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; +use Composer\Script\ScriptEvents; +use Composer\Util\Platform; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; @@ -146,8 +148,13 @@ protected function execute(InputInterface $input, OutputInterface $output) $downloadManager->setPreferSource($preferSource); $downloadManager->setPreferDist($preferDist); - $installationManager->execute($localRepo, $uninstallOperations, true); - $installationManager->execute($localRepo, $installOperations, true); + $devMode = $localRepo->getDevMode() !== null ? $localRepo->getDevMode() : true; + + Platform::putEnv('COMPOSER_DEV_MODE', $devMode ? '1' : '0'); + $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_INSTALL_CMD, $devMode); + + $installationManager->execute($localRepo, $uninstallOperations, $devMode); + $installationManager->execute($localRepo, $installOperations, $devMode); if (!$input->getOption('no-autoloader')) { $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); @@ -162,6 +169,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $generator->dump($config, $localRepo, $package, $installationManager, 'composer', $optimize); } + $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_INSTALL_CMD, $devMode); + return 0; } } diff --git a/src/Composer/Repository/FilesystemRepository.php b/src/Composer/Repository/FilesystemRepository.php index 6f130ce05393..781a79d0f14e 100644 --- a/src/Composer/Repository/FilesystemRepository.php +++ b/src/Composer/Repository/FilesystemRepository.php @@ -36,6 +36,8 @@ class FilesystemRepository extends WritableArrayRepository private $rootPackage; /** @var Filesystem */ private $filesystem; + /** @var bool|null */ + private $devMode = null; /** * Initializes filesystem repository. @@ -56,6 +58,14 @@ public function __construct(JsonFile $repositoryFile, $dumpVersions = false, Roo } } + /** + * @inheritDoc + */ + public function getDevMode() + { + return $this->devMode; + } + /** * Initializes repository (reads file, or remote address). */ @@ -78,6 +88,9 @@ protected function initialize() if (isset($data['dev-package-names'])) { $this->setDevPackageNames($data['dev-package-names']); } + if (isset($data['dev'])) { + $this->devMode = $data['dev']; + } if (!is_array($packages)) { throw new \UnexpectedValueException('Could not parse package list from the repository'); diff --git a/src/Composer/Repository/InstalledRepositoryInterface.php b/src/Composer/Repository/InstalledRepositoryInterface.php index b5d8a264e39a..a25d7369e2e7 100644 --- a/src/Composer/Repository/InstalledRepositoryInterface.php +++ b/src/Composer/Repository/InstalledRepositoryInterface.php @@ -21,6 +21,11 @@ */ interface InstalledRepositoryInterface extends WritableRepositoryInterface { + /** + * @return bool|null true if dev requirements were installed, false if --no-dev was used, null if yet unknown + */ + public function getDevMode(); + /** * @return bool true if packages were never installed in this repository */ diff --git a/src/Composer/Repository/WritableArrayRepository.php b/src/Composer/Repository/WritableArrayRepository.php index 2cf2f576acc2..1ca2bd636a6b 100644 --- a/src/Composer/Repository/WritableArrayRepository.php +++ b/src/Composer/Repository/WritableArrayRepository.php @@ -27,6 +27,17 @@ class WritableArrayRepository extends ArrayRepository implements WritableReposit */ protected $devPackageNames = array(); + /** @var bool|null */ + private $devMode = null; + + /** + * @inheritDoc + */ + public function getDevMode() + { + return $this->devMode; + } + /** * @inheritDoc */ @@ -48,6 +59,7 @@ public function getDevPackageNames() */ public function write($devMode, InstallationManager $installationManager) { + $this->devMode = $devMode; } /** @@ -55,6 +67,7 @@ public function write($devMode, InstallationManager $installationManager) */ public function reload() { + $this->devMode = null; } /**