From 4ce925225585e0b57cfa4bf8770b02db346f24b1 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 7 Oct 2014 11:05:05 +0100 Subject: [PATCH] Avoid passing args to CLI handlers when none are needed, fixes #3332 --- src/Composer/Autoload/AutoloadGenerator.php | 4 ++-- src/Composer/EventDispatcher/Event.php | 23 ++++++++++++++++--- .../EventDispatcher/EventDispatcher.php | 14 ++++++----- src/Composer/Plugin/CommandEvent.php | 7 +++--- src/Composer/Script/Event.php | 7 +++--- 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index 1d9f5b9c0..45c105ef9 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -53,7 +53,7 @@ class AutoloadGenerator public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '') { - $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array( + $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array( 'optimize' => (bool) $scanPsr0Packages )); @@ -237,7 +237,7 @@ EOF; fclose($targetLoader); unset($sourceLoader, $targetLoader); - $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array( + $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array( 'optimize' => (bool) $scanPsr0Packages, )); } diff --git a/src/Composer/EventDispatcher/Event.php b/src/Composer/EventDispatcher/Event.php index 7aff24f11..b9ebeb029 100644 --- a/src/Composer/EventDispatcher/Event.php +++ b/src/Composer/EventDispatcher/Event.php @@ -25,10 +25,15 @@ class Event protected $name; /** - * @var array Arguments passed by the user + * @var array Arguments passed by the user, these will be forwarded to CLI script handlers */ protected $args; + /** + * @var array Flags usable in PHP script handlers + */ + protected $flags; + /** * @var boolean Whether the event should not be passed to more listeners */ @@ -38,12 +43,14 @@ class Event * Constructor. * * @param string $name The event name - * @param array $events Arguments passed by the user + * @param array $args Arguments passed by the user + * @param array $flags Optional flags to pass data not as argument */ - public function __construct($name, array $args = array()) + public function __construct($name, array $args = array(), array $flags = array()) { $this->name = $name; $this->args = $args; + $this->flags = $flags; } /** @@ -66,6 +73,16 @@ class Event return $this->args; } + /** + * Returns the event's flags. + * + * @return array The event flags + */ + public function getFlags() + { + return $this->flags; + } + /** * Checks if stopPropagation has been called * diff --git a/src/Composer/EventDispatcher/EventDispatcher.php b/src/Composer/EventDispatcher/EventDispatcher.php index 0c62075e9..3026d3c9c 100644 --- a/src/Composer/EventDispatcher/EventDispatcher.php +++ b/src/Composer/EventDispatcher/EventDispatcher.php @@ -81,13 +81,14 @@ class EventDispatcher * * @param string $eventName The constant in ScriptEvents * @param bool $devMode - * @param array $additionalArgs + * @param array $additionalArgs Arguments passed by the user + * @param array $flags Optional flags to pass data not as argument * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ - public function dispatchScript($eventName, $devMode = false, $additionalArgs = array()) + public function dispatchScript($eventName, $devMode = false, $additionalArgs = array(), $flags = array()) { - return $this->doDispatch(new Script\Event($eventName, $this->composer, $this->io, $devMode, $additionalArgs)); + return $this->doDispatch(new Script\Event($eventName, $this->composer, $this->io, $devMode, $additionalArgs, $flags)); } /** @@ -109,13 +110,14 @@ class EventDispatcher * * @param string $eventName The constant in ScriptEvents * @param boolean $devMode Whether or not we are in dev mode - * @param array $additionalArgs + * @param array $additionalArgs Arguments passed by the user + * @param array $flags Optional flags to pass data not as argument * @return int return code of the executed script if any, for php scripts a false return * value is changed to 1, anything else to 0 */ - public function dispatchCommandEvent($eventName, $devMode, $additionalArgs = array()) + public function dispatchCommandEvent($eventName, $devMode, $additionalArgs = array(), $flags = array()) { - return $this->doDispatch(new CommandEvent($eventName, $this->composer, $this->io, $devMode, $additionalArgs)); + return $this->doDispatch(new CommandEvent($eventName, $this->composer, $this->io, $devMode, $additionalArgs, $flags)); } diff --git a/src/Composer/Plugin/CommandEvent.php b/src/Composer/Plugin/CommandEvent.php index 1c83db2b9..0697df97a 100644 --- a/src/Composer/Plugin/CommandEvent.php +++ b/src/Composer/Plugin/CommandEvent.php @@ -45,11 +45,12 @@ class CommandEvent extends Event * @param string $commandName The command name * @param InputInterface $input * @param OutputInterface $output - * @param array $events Arguments passed by the user + * @param array $args Arguments passed by the user + * @param array $flags Optional flags to pass data not as argument */ - public function __construct($name, $commandName, $input, $output, array $args = array()) + public function __construct($name, $commandName, $input, $output, array $args = array(), array $flags = array()) { - parent::__construct($name, $args); + parent::__construct($name, $args, $flags); $this->commandName = $commandName; $this->input = $input; $this->output = $output; diff --git a/src/Composer/Script/Event.php b/src/Composer/Script/Event.php index 58fb4788b..bde7e3b6f 100644 --- a/src/Composer/Script/Event.php +++ b/src/Composer/Script/Event.php @@ -46,11 +46,12 @@ class Event extends BaseEvent * @param Composer $composer The composer object * @param IOInterface $io The IOInterface object * @param boolean $devMode Whether or not we are in dev mode - * @param array $events Arguments passed by the user + * @param array $args Arguments passed by the user + * @param array $flags Optional flags to pass data not as argument */ - public function __construct($name, Composer $composer, IOInterface $io, $devMode = false, array $args = array()) + public function __construct($name, Composer $composer, IOInterface $io, $devMode = false, array $args = array(), array $flags = array()) { - parent::__construct($name, $args); + parent::__construct($name, $args, $flags); $this->composer = $composer; $this->io = $io; $this->devMode = $devMode;