Always set bin-dir into PATH before calling scripts, fixes #4852, closes #4898

main
Jordi Boggiano 9 years ago
parent 6eb50623e6
commit 2609cfdd1d

@ -84,13 +84,6 @@ EOT
throw new \InvalidArgumentException(sprintf('Script "%s" is not defined in this package', $script));
}
// add the bin dir to the PATH to make local binaries of deps usable in scripts
$binDir = $composer->getConfig()->get('bin-dir');
if (is_dir($binDir)) {
$_SERVER['PATH'] = realpath($binDir).PATH_SEPARATOR.getenv('PATH');
putenv('PATH='.$_SERVER['PATH']);
}
$args = $input->getArgument('args');
return $composer->getEventDispatcher()->dispatchScript($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args);

@ -54,13 +54,6 @@ EOT
{
$composer = $this->getComposer();
// add the bin dir to the PATH to make local binaries of deps usable in scripts
$binDir = $composer->getConfig()->get('bin-dir');
if (is_dir($binDir)) {
$_SERVER['PATH'] = realpath($binDir).PATH_SEPARATOR.getenv('PATH');
putenv('PATH='.$_SERVER['PATH']);
}
$args = $input->getArguments();
return $composer->getEventDispatcher()->dispatchScript($this->script, $input->getOption('dev') || !$input->getOption('no-dev'), $args['args']);

@ -145,6 +145,16 @@ class EventDispatcher
*/
protected function doDispatch(Event $event)
{
// add the bin dir to the PATH to make local binaries of deps usable in scripts
$binDir = $this->composer->getConfig()->get('bin-dir');
if (is_dir($binDir)) {
$binDir = realpath($binDir);
if (isset($_SERVER['PATH']) && !preg_match('{(^|'.PATH_SEPARATOR.')'.preg_quote($binDir).'($|'.PATH_SEPARATOR.')}', $_SERVER['PATH'])) {
$_SERVER['PATH'] = $binDir.PATH_SEPARATOR.getenv('PATH');
putenv('PATH='.$_SERVER['PATH']);
}
}
$listeners = $this->getListeners($event);
$this->pushEvent($event);

Loading…
Cancel
Save