From 66d7a880cb37f809df6806e5dc62d191dc257d08 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Wed, 8 Apr 2015 11:21:50 +0200 Subject: [PATCH] fix stream progress notification with resetting bytes_max --- bin/pharext | Bin 70218 -> 70305 bytes src/pharext/Packager.php | 21 ++++++++++++++------- src/pharext/Task/StreamFetch.php | 11 ++++++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/bin/pharext b/bin/pharext index 9bb285cbbf02c144a48047268f6e53b6b6d3bae2..3de5018b8b5f92aa23453111acd01fe591717a6a 100755 GIT binary patch delta 937 zcmZWn%}*0S938Zx3kp?%V8JjuyWLW3Y0H<|rBE>_$cKPRJQ#6l2Wf1(&F&TJ;GcWU-_j~XCc6Q~34qk;7RLrs=^+$GnMuvS(-xeH4)vTF>Are- zY_xmiQt!pVD6Efp$%UFavgA5a89Et8yBOr7tI5&g51z{Xc0Jwaj8ZG#Px*?CpU$o? zljpE;FD;O-(093_qg~!y<`etHgC~NnCe9YGWY`2LRRZ_!_BmA0xjcCu=H^IXNl^ z+1ZpsPUn6;j*a)fo7c!Y`2@RMlet5cnW6qq^O6BWIU0hyB+|kWHs)}eev{J(Le*#ru0M{j?Y-w97}1_ za6Eex>Jv~;()Wf#JwtE`8)iaJo3J5JA_y|&Ffxq5ph~J19uE7UvQ_oMSxOQT6R=+1 z*6e`)6L#oqGgZ5Jjw~%akhXj}U=Vh~0wXa!Tt$YRDPZ#OIKNtwo6&iSXYqV`U^ d`lB_l>3?!hd|fu|-6-8~yXbEY&UX!T{ROo09hLw9 delta 889 zcmZ3ul;zYCmJOa#HYU6b49W})41z$+2*eBwvTO_tiB@J-)x|(UDI+y8CACP&y4cFZ z(n_fyBe5v8qC}z0SkFMuVDdyMQw~!rB?#xXlo5-uuCc*pLFw770wzF{madfy1<~od z%T7$*qoBtO6qx*0K?h9BDC&Y~A4Q0Gt)elQzgf`)Outez0@LzJ5cPga5cPFRnqcu& zN|s>ynUW!xmQse$e#*u?AdBC!GcYW6c{*>hp}O$o1vdb0MU&HEf!5atD+5-{H+49L0=W3IR#43gwp3!AvVupVPHu8Su$(# z1vL?2=bTJ^$D;INy@HGaZ%MGplTFkhwxz4-fSoD`)bOk%B?j!&O==LQ9#_*8c&`9) z3W&DwT`dh(Agm5iprH;4xJY$Kz;vqHvV&tn$$EMLKcnR4PwGA;lN;ysFl#DQPmY`0 ztC&<-l3E;}n^>V>ub=|qB$pQHLzzJF$$azNHpk5?j+@N#*P5xCYjVP0C05m9B^|EG zZGROfulTDo`RZRybsa8F5P<3{NG?&ZwN)?#8mbhNr(~t11eVsc-W>iVK^gQ&V24V=Q*X_=Ci?ldcIeQJYVFT<9dhtl9A7YS3X{SMvqS=3Ey!WO4GQ z^|VPBe;?Ukb&qpu+I;bB_H7D&wiOZYCOJ(u{>A=bk%N<0M@YLG_p4&v=KAxwrYzIq zyynb0F(YY%Ppeg*1dHcOubkxVlqo8w<6!HmDKZ*ew{z}1y2b6mAd@*W>3_fT=b65*n^nw? ztFhER-N^jZW!}Q=vN!oMKZGut+E?jrRj2##^$ZQ~Pr7fjgV>*{A=*K VzFEupG@gO-l>jgsxI6he0RX8VMFIc- diff --git a/src/pharext/Packager.php b/src/pharext/Packager.php index 81bac81..cd1d436 100644 --- a/src/pharext/Packager.php +++ b/src/pharext/Packager.php @@ -144,13 +144,20 @@ class Packager implements Command 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()); diff --git a/src/pharext/Task/StreamFetch.php b/src/pharext/Task/StreamFetch.php index 3b1fc29..029754e 100644 --- a/src/pharext/Task/StreamFetch.php +++ b/src/pharext/Task/StreamFetch.php @@ -33,16 +33,21 @@ class StreamFetch implements Task 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; } -- 2.30.2