o ]Lb+@spddlmZddlZddlZddlZddlmZddlmZddZ dd Z d d Z d d Z Gddde ZdS))absolute_importN_)encodingcGsddd|DS)N css|]}|r|VqdSN).0sr r 4/usr/lib/python3/dist-packages/mercurial/progress.py szspacejoin..)join)argsr r r spacejoinrcCs*|jp|d o||jp|ddS)Nprogresss assume-tty)quietplain_isattyferr configbool)uir r r shouldprintsrcCs|dkr td|S|d}|dkr ||d8}td||fS|d7}|d}||d8}|dkr:td||fS|d7}|d}||d8}|dkrTtd ||fS|d7}|d }||d 8}|d krntd ||fS|d7}|d }||d 8}td||fS)zformat a number of remaining seconds in human readable way This will properly display seconds, minutes, hours, days if needed<s%02dss%dm%02dsrs%dh%02dms%dd%02dh7s%dw%02dd4s%dy%02dwr)secondsminuteshoursdaysweeksyearsr r r fmtremainings2      r'c Gs@ z||WSty}z |jtjkrWYd}~qd}~wwr)IOErrorerrnoEINTR)funcrerrr r r _eintrretryNs   r-c@s~eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdddZddZdS) progbarcCs||_t|_|dSr)r threadingLock _refreshlock resetstate)selfrr r r __init__Ys  zprogbar.__init__cCsg|_i|_i|_i|_d|_tt|jdd|_ d|_ d|_ d|_ t|jdd|_ td|j t|jdd|_|jdd|_|jtdd |_dS) NFrsdelayrsrefreshs changedelaysformatsestimateinterval)topics topicstates starttimes startvalsprintedtimefloatrconfig lastprintcurtopic lasttopic indetcountrefreshmax changedelay configlistorder configwithestimateintervalr3r r r r2^s&  zprogbar.resetstatecCst|jsdS|}d|_d}d} d} |jD]} d} | dkr"|} n| dkr9|r4dtt|||f} nxd|} ns| dr|rd } d | vrPt| d d }nd | vr`d } t| d d }nd}| d krot j ||dd} nt ||} | |t | d7} n+| dkrd} d} n"| dkr|r|} n| dkr| ||||} n | dkr|||||} | st|| }qt| | } q| r7d}|r|t |d 7}| r|t | d 7}||d}|r||kr|||}d|d }|dkr|d7}|d||7}n*|d8}|jd 7_|jd|}||8}dt|t|ddtt|}dd|df}t||| }nt|| }|dt ||||_|dS)NTFstopicsnumbers%*d/%ds%dsitemsend-r+s beginning)leftsidersbarsunitsestimatesspeedrr5=>s<=>[] )rrwidthr:rFlenstr startswithintsplitrtrimcolwidthestimatespeedrrAabsr _writeerrr@ _flusherr)r3nowtopicpositemunittotal termwidthhead needprogresstail indicatoraddslicewidused progwidthamtbarprogoutr r r showss             z progbar.showcCsL|jr |jr t|js dS|dd|||jr$d|_dSdS)Ns %s rr)r:r>rrr`rUrarIr r r clears z progbar.clearcCs<t|jsdS|jddr|n|d|dS)Nrsclear-complete )rrrrwr`rarIr r r completes    zprogbar.completecCst|jjjdSr)r-rrflushrIr r r raszprogbar._flusherrcCst|jjj|dSr)r-rrwrite)r3msgr r r r`rzprogbar._writeerrcCs&|j}tt|jjdd|d|S)Nrswidth)default)rrhminrYr=)r3twr r r rUs z progbar.widthc Cs\|durdS|j|}||}||}|dkr,||j|}||||d} t| SdS)NrJrr)r9r8r') r3rcrdrgrb initialpostargetdeltaelapsedr!r r r r]s zprogbar.estimatecCs@|j|}||}||j|}|dkrtd|||fSdS)Nrs %d %s/secrJ)r9r8r)r3rcrdrfrbrrrr r r r^s z progbar.speedcCs.|jdus|j|jks||j|jkrdSdS)z?Check if conditions are met to print - e.g. changedelay elapsedNTF)r@r?r>rD)r3rbr r r _oktoprints  zprogbar._oktoprintcCsr|j}|dkr dS||j|}||kr7||j|}|||}|dkr'dS|||j|<|||j|<dSdS)aAdjust starttimes and startvals for topic so ETA works better If progress is non-linear (ex. get much slower in the last minute), it's more friendly to only use a recent time span for ETA and speed calculation. [======================================> ] ^^^^^^^ estimateinterval, only use this for estimation rNg?)rHr8r9)r3rcrbrdintervalrrnewdeltar r r _calibrateestimates  zprogbar._calibrateestimaterJNcCs |dur ||dSt}|ji||jvr(||j|<||j|<|j|||||f|j|<||_| |||||j |j krc|jrk| |rs||_ |j ||g|j|RWddSWddSWddSWddS1s~wYdSr) closetopicr;r1r6r8r9appendr7r?rr>rBrrv)r3rcrdrerfrgrbr r r progresss.       "zprogbar.progresscCs|ja|j|d|j|d|j|d|jr.|jd|kr.|jr.||||jvrT|jd|j ||_|jrI|jd|_ nd|_ WddSWddSWddS1sgwYdS)Nr) r1r8popr9r7r6r:ryr2indexr@)r3rcr r r r)s"  "zprogbar.closetopic)rJrJN)__name__ __module__ __qualname__r4r2rvrwryrar`rUr]r^rrrrr r r r r.XsM     r.) __future__rr)r/r;i18nrrrrr'r-objectr.r r r r s   2