Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita9d47eb

Browse files
committed
[Console] added a way to add a custom message on a progress bar
1 parent7a30e50 commita9d47eb

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

‎src/Symfony/Component/Console/Helper/ProgressBar.php

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
class ProgressBar
2424
{
2525
constFORMAT_QUIET =' %percent%%';
26-
constFORMAT_NORMAL =' %current%/%max% [%bar%] %percent%%';
27-
constFORMAT_VERBOSE =' %current%/%max% [%bar%] %percent%% Elapsed: %elapsed%';
26+
constFORMAT_NORMAL =' %current%/%max% [%bar%] %percent:3s%%';
27+
constFORMAT_VERBOSE =' %current%/%max% [%bar%] %percent:3s%% Elapsed: %elapsed:6s%';
2828
constFORMAT_QUIET_NOMAX =' %current%';
2929
constFORMAT_NORMAL_NOMAX =' %current% [%bar%]';
30-
constFORMAT_VERBOSE_NOMAX =' %current% [%bar%] Elapsed: %elapsed%';
30+
constFORMAT_VERBOSE_NOMAX =' %current% [%bar%] Elapsed: %elapsed:6s%';
3131

3232
// options
3333
private$barWidth =28;
@@ -49,6 +49,7 @@ class ProgressBar
4949
private$lastMessagesLength;
5050
private$barCharOriginal;
5151
private$formatLineCount;
52+
private$messages;
5253

5354
staticprivate$formatters;
5455

@@ -87,6 +88,16 @@ public static function setPlaceholderFormatter($name, $callable)
8788
self::$formatters[$name] =$callable;
8889
}
8990

91+
publicfunctionsetMessage($message,$name ='message')
92+
{
93+
$this->messages[$name] =$message;
94+
}
95+
96+
publicfunctiongetMessage($name ='message')
97+
{
98+
return$this->messages[$name];
99+
}
100+
90101
/**
91102
* Gets the progress bar start time.
92103
*
@@ -337,10 +348,21 @@ public function display()
337348
thrownew \LogicException('You must start the progress bar before calling display().');
338349
}
339350

340-
$regex =implode('|',array_keys(self::$formatters));
341351
$self =$this;
342-
$this->overwrite(preg_replace_callback("{($regex)}",function ($matches)use ($self) {
343-
returncall_user_func(self::$formatters[$matches[1]],$self);
352+
$this->overwrite(preg_replace_callback("{%([a-z\-_]+)(?:\:([^%]+))?%}i",function ($matches)use ($self) {
353+
if (isset(self::$formatters[$matches[1]])) {
354+
$text =call_user_func(self::$formatters[$matches[1]],$self);
355+
}elseif (isset($this->messages[$matches[1]])) {
356+
$text =$this->messages[$matches[1]];
357+
}else {
358+
return$matches[0];
359+
}
360+
361+
if (isset($matches[2])) {
362+
$text =sprintf('%'.$matches[2],$text);
363+
}
364+
365+
return$text;
344366
},$this->format));
345367
}
346368

@@ -413,7 +435,7 @@ private function determineBestFormat()
413435
staticprivatefunctioninitPlaceholderFormatters()
414436
{
415437
returnarray(
416-
'%bar%' =>function (ProgressBar$bar) {
438+
'bar' =>function (ProgressBar$bar) {
417439
$completeBars =floor($bar->getMaxSteps() >0 ?$bar->getProgressPercent() *$bar->getBarWidth() :$bar->getStep() %$bar->getBarWidth());
418440
$emptyBars =$bar->getBarWidth() -$completeBars - Helper::strlen($bar->getProgressCharacter());
419441
$display =str_repeat($bar->getBarCharacter(),$completeBars);
@@ -423,10 +445,10 @@ static private function initPlaceholderFormatters()
423445

424446
return$display;
425447
},
426-
'%elapsed%' =>function (ProgressBar$bar) {
427-
returnstr_pad(Helper::formatTime(time() -$bar->getStartTime()),6,'',STR_PAD_LEFT);
448+
'elapsed' =>function (ProgressBar$bar) {
449+
return Helper::formatTime(time() -$bar->getStartTime());
428450
},
429-
'%remaining%' =>function (ProgressBar$bar) {
451+
'remaining' =>function (ProgressBar$bar) {
430452
if (!$bar->getMaxSteps()) {
431453
thrownew \LogicException('Unable to display the remaining time if the maximum number of steps is not set.');
432454
}
@@ -437,9 +459,9 @@ static private function initPlaceholderFormatters()
437459
$remaining =round((time() -$bar->getStartTime()) /$bar->getStep() * ($bar->getMaxSteps() -$bar->getStep()));
438460
}
439461

440-
returnstr_pad(Helper::formatTime($remaining),6,'',STR_PAD_LEFT);
462+
return Helper::formatTime($remaining);
441463
},
442-
'%estimated%' =>function (ProgressBar$bar) {
464+
'estimated' =>function (ProgressBar$bar) {
443465
if (!$bar->getMaxSteps()) {
444466
thrownew \LogicException('Unable to display the estimated time if the maximum number of steps is not set.');
445467
}
@@ -450,19 +472,19 @@ static private function initPlaceholderFormatters()
450472
$estimated =round((time() -$bar->getStartTime()) /$bar->getStep() *$bar->getMaxSteps());
451473
}
452474

453-
returnstr_pad(Helper::formatTime($estimated),6,'',STR_PAD_LEFT);
475+
return Helper::formatTime($estimated);
454476
},
455-
'%memory%' =>function (ProgressBar$bar) {
456-
returnstr_pad(Helper::formatMemory(memory_get_usage(true)),6,'',STR_PAD_LEFT);;
477+
'memory' =>function (ProgressBar$bar) {
478+
return Helper::formatMemory(memory_get_usage(true));
457479
},
458-
'%current%' =>function (ProgressBar$bar) {
480+
'current' =>function (ProgressBar$bar) {
459481
returnstr_pad($bar->getStep(),$bar->getStepWidth(),'',STR_PAD_LEFT);
460482
},
461-
'%max%' =>function (ProgressBar$bar) {
483+
'max' =>function (ProgressBar$bar) {
462484
return$bar->getMaxSteps();
463485
},
464-
'%percent%' =>function (ProgressBar$bar) {
465-
returnstr_pad(floor($bar->getProgressPercent() *100),3,'',STR_PAD_LEFT);
486+
'percent' =>function (ProgressBar$bar) {
487+
returnfloor($bar->getProgressPercent() *100);
466488
},
467489
);
468490
}

‎src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public function testCustomizations()
6969
$bar->setBarCharacter('_');
7070
$bar->setEmptyBarCharacter('');
7171
$bar->setProgressCharacter('/');
72-
$bar->setFormat(' %current%/%max% [%bar%] %percent%%');
72+
$bar->setFormat(' %current%/%max% [%bar%] %percent:3s%%');
7373
$bar->start();
7474
$bar->advance();
7575

@@ -102,7 +102,7 @@ public function testPercent()
102102
publicfunctiontestOverwriteWithShorterLine()
103103
{
104104
$bar =newProgressBar($output =$this->getOutputStream(),50);
105-
$bar->setFormat(' %current%/%max% [%bar%] %percent%%');
105+
$bar->setFormat(' %current%/%max% [%bar%] %percent:3s%%');
106106
$bar->start();
107107
$bar->display();
108108
$bar->advance();
@@ -300,7 +300,7 @@ public function testParallelBars()
300300

301301
publicfunctiontestAddingPlaceholderFormatter()
302302
{
303-
ProgressBar::setPlaceholderFormatter('%remaining_steps%',function (ProgressBar$bar) {
303+
ProgressBar::setPlaceholderFormatter('remaining_steps',function (ProgressBar$bar) {
304304
return$bar->getMaxSteps() -$bar->getStep();
305305
});
306306
$bar =newProgressBar($output =$this->getOutputStream(),3);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp