diff --git a/src/Symfony/Component/Console/Helper/ProgressHelper.php b/src/Symfony/Component/Console/Helper/ProgressHelper.php index ed0ccab140..2ae910a920 100644 --- a/src/Symfony/Component/Console/Helper/ProgressHelper.php +++ b/src/Symfony/Component/Console/Helper/ProgressHelper.php @@ -36,6 +36,7 @@ class ProgressHelper extends Helper private $format = null; private $redrawFreq = 1; + private $lastMessagesLength; private $barCharOriginal; /** @@ -380,21 +381,17 @@ class ProgressHelper extends Helper * * @param OutputInterface $output An Output instance * @param string|array $messages The message as an array of lines or a single string - * @param Boolean $newline Whether to add a newline or not - * @param integer $size The size of line */ - private function overwrite(OutputInterface $output, $messages, $newline = false, $size = 80) + private function overwrite(OutputInterface $output, $messages) { - $output->write(str_repeat("\x08", $size)); - $output->write($messages); - $output->write(str_repeat(' ', $size - strlen($messages))); - - // clean up the end line - $output->write(str_repeat("\x08", $size - strlen($messages))); - - if ($newline) { - $output->writeln(''); + $output->write("\x0D"); // carriage return + if($this->lastMessagesLength!==null){ + $output->write(str_repeat("\x20", $this->lastMessagesLength)); //clear the line with the length of the last message + $output->write("\x0D"); // carriage return } + $output->write($messages); + + $this->lastMessagesLength=strlen($messages); } /** diff --git a/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php index 531d6a80dc..51d413dca7 100644 --- a/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php @@ -79,8 +79,18 @@ class ProgressHelperTest extends \PHPUnit_Framework_TestCase return new StreamOutput(fopen('php://memory', 'r+', false)); } + protected $lastMessagesLength; + protected function generateOutput($expected) { - return str_repeat("\x08", 80).$expected.str_repeat(' ', 80 - strlen($expected)).str_repeat("\x08", 80 - strlen($expected)); + $expectedout = $expected; + + if($this->lastMessagesLength!==null){ + $expectedout=str_repeat("\x20", $this->lastMessagesLength)."\x0D".$expected; + } + + $this->lastMessagesLength=strlen($expected); + + return "\x0D".$expectedout; } }