diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index 1156f28a0..756cf18c6 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -103,9 +103,8 @@ class Application extends BaseApplication */ public function doRun(InputInterface $input, OutputInterface $output) { - $this->io = new ConsoleIO($input, $output, $this->getHelperSet()); - ErrorHandler::register($this->io); - $io = $this->getIO(); + $io = $this->io = new ConsoleIO($input, $output, $this->getHelperSet()); + ErrorHandler::register($io); // determine command name to be executed $commandName = ''; @@ -128,53 +127,58 @@ class Application extends BaseApplication if (defined('COMPOSER_DEV_WARNING_TIME') && $commandName !== 'self-update' && $commandName !== 'selfupdate' && time() > COMPOSER_DEV_WARNING_TIME) { $io->writeError(sprintf('Warning: This development build of composer is over 60 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF'])); } - } - if (getenv('COMPOSER_NO_INTERACTION')) { - $input->setInteractive(false); - } + if (getenv('COMPOSER_NO_INTERACTION')) { + $input->setInteractive(false); + } - // switch working dir - if ($newWorkDir = $this->getNewWorkingDir($input)) { - $oldWorkingDir = getcwd(); - chdir($newWorkDir); - if ($io->isDebug() >= 4) { - $io->writeError('Changed CWD to ' . getcwd()); + // switch working dir + if ($newWorkDir = $this->getNewWorkingDir($input)) { + $oldWorkingDir = getcwd(); + chdir($newWorkDir); + if ($io->isDebug() >= 4) { + $io->writeError('Changed CWD to ' . getcwd()); + } } - } - // add non-standard scripts as own commands - $file = Factory::getComposerFile(); - if (is_file($file) && is_readable($file) && is_array($composer = json_decode(file_get_contents($file), true))) { - if (isset($composer['scripts']) && is_array($composer['scripts'])) { - foreach ($composer['scripts'] as $script => $dummy) { - if (!defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) { - if ($this->has($script)) { - $io->writeError('A script named '.$script.' would override a native Composer function and has been skipped'); - } else { - $this->add(new Command\ScriptAliasCommand($script)); + // add non-standard scripts as own commands + $file = Factory::getComposerFile(); + if (is_file($file) && is_readable($file) && is_array($composer = json_decode(file_get_contents($file), true))) { + if (isset($composer['scripts']) && is_array($composer['scripts'])) { + foreach ($composer['scripts'] as $script => $dummy) { + if (!defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) { + if ($this->has($script)) { + $io->writeError('A script named '.$script.' would override a native Composer function and has been skipped'); + } else { + $this->add(new Command\ScriptAliasCommand($script)); + } } } } } } - if ($input->hasParameterOption('--profile')) { - $startTime = microtime(true); - $this->io->enableDebugging($startTime); - } + try { + if ($input->hasParameterOption('--profile')) { + $startTime = microtime(true); + $this->io->enableDebugging($startTime); + } - $result = parent::doRun($input, $output); + $result = parent::doRun($input, $output); - if (isset($oldWorkingDir)) { - chdir($oldWorkingDir); - } + if (isset($oldWorkingDir)) { + chdir($oldWorkingDir); + } - if (isset($startTime)) { - $io->writeError('Memory usage: '.round(memory_get_usage() / 1024 / 1024, 2).'MB (peak: '.round(memory_get_peak_usage() / 1024 / 1024, 2).'MB), time: '.round(microtime(true) - $startTime, 2).'s'); - } + if (isset($startTime)) { + $io->writeError('Memory usage: '.round(memory_get_usage() / 1024 / 1024, 2).'MB (peak: '.round(memory_get_peak_usage() / 1024 / 1024, 2).'MB), time: '.round(microtime(true) - $startTime, 2).'s'); + } - return $result; + return $result; + } catch (\Exception $e) { + $this->hintCommonErrors($e); + throw $e; + } } /** @@ -195,7 +199,7 @@ class Application extends BaseApplication /** * {@inheritDoc} */ - public function renderException($exception, $output) + private function hintCommonErrors($exception) { $io = $this->getIO(); @@ -224,12 +228,6 @@ class Application extends BaseApplication $io->writeError('The following exception is caused by a lack of memory and not having swap configured'); $io->writeError('Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details'); } - - if ($output instanceof ConsoleOutputInterface) { - parent::renderException($exception, $output->getErrorOutput()); - } else { - parent::renderException($exception, $output); - } } /**