if ($this->args->git) {
$task = new Task\GitClone($source);
} else {
- $task = new Task\StreamFetch($source, function($bytes_pct) {
- $this->info(" %3d%% [%s>%s] \r%s",
- floor($bytes_pct*100),
- str_repeat("=", round(50*$bytes_pct)),
- str_repeat(" ", round(50*(1-$bytes_pct))),
- $bytes_pct == 1 ? "\n":""
- );
+ /* print newline only once */
+ $done = false;
+ $task = new Task\StreamFetch($source, function($bytes_pct) use(&$done) {
+ if (!$done) {
+ $this->info(" %3d%% [%s>%s] \r",
+ floor($bytes_pct*100),
+ str_repeat("=", round(50*$bytes_pct)),
+ str_repeat(" ", round(50*(1-$bytes_pct)))
+ );
+ if ($bytes_pct == 1) {
+ $done = true;
+ printf("\n");
+ }
+ }
});
}
$local = $task->run($this->verbosity());
private function createStreamContext() {
$progress = $this->progress;
- return stream_context_create([],["notification" => function($notification, $severity, $message, $code, $bytes_cur, $bytes_max) use($progress) {
+ /* avoid bytes_max bug of older PHP versions */
+ $maxbytes = 0;
+ return stream_context_create([],["notification" => function($notification, $severity, $message, $code, $bytes_cur, $bytes_max) use($progress, &$maxbytes) {
+ if ($bytes_max > $maxbytes) {
+ $maxbytes = $bytes_max;
+ }
switch ($notification) {
case STREAM_NOTIFY_CONNECT:
$progress(0);
break;
case STREAM_NOTIFY_PROGRESS:
- $progress($bytes_max ? $bytes_cur/$bytes_max : .5);
+ $progress($maxbytes > 0 ? $bytes_cur/$maxbytes : .5);
break;
case STREAM_NOTIFY_COMPLETED:
- /* this is not generated, why? */
+ /* this is sometimes not generated, why? */
$progress(1);
break;
}