fixed logic
This commit is contained in:
parent
a589635643
commit
bf7a5c58a9
@ -36,7 +36,6 @@ use Symfony\Component\Console\Event\ConsoleExceptionEvent;
|
|||||||
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
|
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
|
||||||
use Symfony\Component\Console\Exception\CommandNotFoundException;
|
use Symfony\Component\Console\Exception\CommandNotFoundException;
|
||||||
use Symfony\Component\Console\Exception\LogicException;
|
use Symfony\Component\Console\Exception\LogicException;
|
||||||
use Symfony\Component\Console\Terminal;
|
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -413,9 +413,7 @@ class ProgressBar
|
|||||||
$this->setRealFormat($this->internalFormat ?: $this->determineBestFormat());
|
$this->setRealFormat($this->internalFormat ?: $this->determineBestFormat());
|
||||||
}
|
}
|
||||||
|
|
||||||
$line = $this->buildLine();
|
$this->overwrite($this->buildLine());
|
||||||
$line = $this->adjustLineWidthToTerminalWidth($line);
|
|
||||||
$this->overwrite($line);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -601,7 +599,8 @@ class ProgressBar
|
|||||||
*/
|
*/
|
||||||
private function buildLine()
|
private function buildLine()
|
||||||
{
|
{
|
||||||
return preg_replace_callback("{%([a-z\-_]+)(?:\:([^%]+))?%}i", function ($matches) {
|
$regex = "{%([a-z\-_]+)(?:\:([^%]+))?%}i";
|
||||||
|
$callback = function ($matches) {
|
||||||
if ($formatter = $this::getPlaceholderFormatterDefinition($matches[1])) {
|
if ($formatter = $this::getPlaceholderFormatterDefinition($matches[1])) {
|
||||||
$text = call_user_func($formatter, $this, $this->output);
|
$text = call_user_func($formatter, $this, $this->output);
|
||||||
} elseif (isset($this->messages[$matches[1]])) {
|
} elseif (isset($this->messages[$matches[1]])) {
|
||||||
@ -615,25 +614,17 @@ class ProgressBar
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
}, $this->format);
|
};
|
||||||
}
|
$line = preg_replace_callback($regex, $callback, $this->format);
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $line
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function adjustLineWidthToTerminalWidth($line)
|
|
||||||
{
|
|
||||||
$lineLength = Helper::strlenWithoutDecoration($this->output->getFormatter(), $line);
|
$lineLength = Helper::strlenWithoutDecoration($this->output->getFormatter(), $line);
|
||||||
$terminalWidth = $this->terminal->getWidth();
|
$terminalWidth = $this->terminal->getWidth();
|
||||||
if ($lineLength > $terminalWidth) {
|
if ($lineLength <= $terminalWidth) {
|
||||||
$newBarWidth = $this->barWidth - $lineLength + $terminalWidth;
|
return $line;
|
||||||
$this->setBarWidth($newBarWidth);
|
|
||||||
|
|
||||||
return $this->buildLine();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $line;
|
$this->setBarWidth($this->barWidth - $lineLength + $terminalWidth);
|
||||||
|
|
||||||
|
return preg_replace_callback($regex, $callback, $this->format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\Console\Style;
|
namespace Symfony\Component\Console\Style;
|
||||||
|
|
||||||
use Symfony\Component\Console\Application;
|
|
||||||
use Symfony\Component\Console\Exception\RuntimeException;
|
use Symfony\Component\Console\Exception\RuntimeException;
|
||||||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||||||
use Symfony\Component\Console\Helper\Helper;
|
use Symfony\Component\Console\Helper\Helper;
|
||||||
|
@ -33,7 +33,7 @@ class Terminal
|
|||||||
/**
|
/**
|
||||||
* Sets the terminal width.
|
* Sets the terminal width.
|
||||||
*
|
*
|
||||||
* @param int
|
* @param int $width
|
||||||
*/
|
*/
|
||||||
public function setWidth($width)
|
public function setWidth($width)
|
||||||
{
|
{
|
||||||
@ -57,7 +57,7 @@ class Terminal
|
|||||||
/**
|
/**
|
||||||
* Sets the terminal height.
|
* Sets the terminal height.
|
||||||
*
|
*
|
||||||
* @param int
|
* @param int $height
|
||||||
*/
|
*/
|
||||||
public function setHeight($height)
|
public function setHeight($height)
|
||||||
{
|
{
|
||||||
|
@ -14,7 +14,6 @@ namespace Symfony\Component\Console\Tests\Helper;
|
|||||||
use Symfony\Component\Console\Helper\ProgressBar;
|
use Symfony\Component\Console\Helper\ProgressBar;
|
||||||
use Symfony\Component\Console\Helper\Helper;
|
use Symfony\Component\Console\Helper\Helper;
|
||||||
use Symfony\Component\Console\Output\StreamOutput;
|
use Symfony\Component\Console\Output\StreamOutput;
|
||||||
use Symfony\Component\Console\Terminal;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group time-sensitive
|
* @group time-sensitive
|
||||||
|
Reference in New Issue
Block a user