1
0
Fork 0

Fix reinstall command not firing pre-install-cmd/post-install-cmd events, fixes #10508 (#10514)

pull/10517/head
Jordi Boggiano 2022-02-04 14:08:07 +01:00 committed by GitHub
parent 88171e409d
commit 8053d794a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 3 deletions

View File

@ -21,6 +21,8 @@ use Composer\Package\BasePackage;
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;
@ -127,7 +129,8 @@ EOT
});
$commandEvent = new CommandEvent(PluginEvents::COMMAND, 'reinstall', $input, $output);
$composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
$eventDispatcher = $composer->getEventDispatcher();
$eventDispatcher->dispatch($commandEvent->getName(), $commandEvent);
$config = $composer->getConfig();
list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input);
@ -146,8 +149,13 @@ EOT
$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');
$eventDispatcher->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 +170,8 @@ EOT
$generator->dump($config, $localRepo, $package, $installationManager, 'composer', $optimize);
}
$eventDispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, $devMode);
return 0;
}
}

View File

@ -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 @@ class FilesystemRepository extends WritableArrayRepository
}
}
/**
* @return bool|null true if dev requirements were installed, false if --no-dev was used, null if yet unknown
*/
public function getDevMode()
{
return $this->devMode;
}
/**
* Initializes repository (reads file, or remote address).
*/
@ -78,6 +88,9 @@ class FilesystemRepository extends WritableArrayRepository
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');

View File

@ -21,6 +21,11 @@ namespace Composer\Repository;
*/
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
*/

View File

@ -27,6 +27,17 @@ class WritableArrayRepository extends ArrayRepository implements WritableReposit
*/
protected $devPackageNames = array();
/** @var bool|null */
private $devMode = null;
/**
* @return bool|null true if dev requirements were installed, false if --no-dev was used, null if yet unknown
*/
public function getDevMode()
{
return $this->devMode;
}
/**
* @inheritDoc
*/
@ -48,6 +59,7 @@ class WritableArrayRepository extends ArrayRepository implements WritableReposit
*/
public function write($devMode, InstallationManager $installationManager)
{
$this->devMode = $devMode;
}
/**
@ -55,6 +67,7 @@ class WritableArrayRepository extends ArrayRepository implements WritableReposit
*/
public function reload()
{
$this->devMode = null;
}
/**