diff --git a/src/Composer/Installer/InstallationManager.php b/src/Composer/Installer/InstallationManager.php index 1a5516c7e..96f193d95 100644 --- a/src/Composer/Installer/InstallationManager.php +++ b/src/Composer/Installer/InstallationManager.php @@ -451,12 +451,22 @@ class InstallationManager private function waitOnPromises(array $promises) { $progress = null; - if ($this->outputProgress && $this->io instanceof ConsoleIO && !$this->io->isDebug() && count($promises) > 1) { + if ( + $this->outputProgress + && $this->io instanceof ConsoleIO + && !getenv('CI') + && !$this->io->isDebug() + && count($promises) > 1 + ) { $progress = $this->io->getProgressBar(); } $this->loop->wait($promises, $progress); if ($progress) { $progress->clear(); + // ProgressBar in non-decorated output does not output a final line-break and clear() does nothing + if ($this->io->isDecorated()) { + $this->io->writeError(''); + } } } diff --git a/src/Composer/Util/Loop.php b/src/Composer/Util/Loop.php index 2e29b563f..eb6461a33 100644 --- a/src/Composer/Util/Loop.php +++ b/src/Composer/Util/Loop.php @@ -108,7 +108,7 @@ class Loop // as we skip progress updates if they are too quick, make sure we do one last one here at 100% if ($progress) { - $progress->setProgress($progress->getMaxSteps()); + $progress->finish(); } unset($this->currentPromises[$waitIndex]);