a
    &0É_³+  ã                   @   sp   d dl mZ d dlZd dlZd dlZddlmZ ddlmZ dd„ Z	dd	„ Z
d
d„ Zdd„ ZG dd„ deƒZdS )é    )Úabsolute_importNé   ©Ú_)Úencodingc                  G   s   d  dd„ | D ƒ¡S )Nó    c                 s   s   | ]}|r|V  qd S ©N© )Ú.0Úsr	   r	   ú4/usr/lib/python3/dist-packages/mercurial/progress.pyÚ	<genexpr>   ó    zspacejoin.<locals>.<genexpr>)Újoin)Úargsr	   r	   r   Ú	spacejoin   s    r   c                 C   s*   | j p|  d¡ o(|  | j¡p(|  dd¡S )Nó   progresss
   assume-tty)ÚquietZplainZ_isattyÚferrÚ
configbool)Úuir	   r	   r   Úshouldprint   s    ÿr   c                 C   s  | dk rt dƒ|  S | d }|dk r@| |d 8 } t dƒ|| f S |d7 }|d }||d 8 }|dk rtt dƒ||f S |d7 }|d }||d 8 }|dk r¨t d	ƒ||f S |d7 }|d
 }||d
 8 }|dk rÜt dƒ||f S |d7 }|d }||d 8 }t dƒ||f S )z‚format a number of remaining seconds in human readable way

    This will properly display seconds, minutes, hours, days if neededé<   s   %02dss   %dm%02dsr   é   s   %dh%02dmé   é   s   %dd%02dhé   é7   s   %dw%02ddé4   s   %dy%02dwr   )ÚsecondsZminutesZhoursZdaysZweeksZyearsr	   r	   r   Úfmtremaining   s2    r    c              
   G   sP   z
| |Ž W S  t yH } z&|jtjkr2W Y d }~q ‚ W Y d }~q d }~0 0 q d S r   )ÚIOErrorÚerrnoZEINTR)Úfuncr   Úerrr	   r	   r   Ú_eintrretryN   s    
r%   c                   @   s~   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ ZdS ) Úprogbarc                 C   s   || _ t ¡ | _|  ¡  d S r   )r   Ú	threadingZLockÚ_refreshlockÚ
resetstate)Úselfr   r	   r	   r   Ú__init__Y   s    
zprogbar.__init__c                 C   s¦   g | _ i | _i | _i | _d| _t ¡ t| j dd¡ƒ | _	d | _
d | _d| _t| j dd¡ƒ| _td| j t| j dd¡ƒƒ| _| j dd¡| _| j tdd	¡| _d S )
NFr   s   delayr   s   refreshé   s   changedelays   formats   estimateinterval)ÚtopicsÚtopicstatesÚ
starttimesÚ	startvalsÚprintedÚtimeÚfloatr   ÚconfigÚ	lastprintÚcurtopicÚ	lasttopicÚ
indetcountÚrefreshÚmaxÚchangedelayZ
configlistÚorderZ
configwithÚestimateinterval©r*   r	   r	   r   r)   ^   s&    ÿÿÿzprogbar.resetstatec                 C   s¾  t | jƒsd S |  ¡ }d| _d}d}	d}
| jD ]V}d}|dkrH|}n"|dkrv|rldtt|ƒƒ||f }nd| }nô| d¡r
|r
d	}d
|v r¨t| 	d
¡d ƒ}n$d|v rÈd}t| 	d¡d ƒ}nd}|d	kræt
j||dd}nt
 ||¡}||t
 |¡ d 7 }n`|dkrd}d}	nL|dkr4|r4|}n6|dkrP|  ||||¡}n|dkrj|  ||||¡}|	s|t||ƒ}q.t|
|ƒ}
q.|	rŒd}|rª|t
 |¡d 7 }|
rÂ|t
 |
¡d 7 }|| d }|r||kr|| | }d|d  }|dkr|d7 }|d||  7 }nT|d8 }|  jd7  _| jd|  }||8 }dt|t|ƒ ƒ d dtt|ƒƒ  }d d|df¡}t|||
ƒ}n
t||
ƒ}|  dt
 ||¡ ¡ || _|  ¡  d S )NTr   Fs   topics   numbers   %*d/%ds   %ds   items   endó   -r   ó   +s	   beginningé   )Zleftsider   s   bars   units   estimates   speedr   r,   ó   =ó   >é   s   <=>ó   [ó   ]ó   )r   r   Úwidthr1   r<   ÚlenÚstrÚ
startswithÚintÚsplitr   ZtrimZcolwidthÚestimateÚspeedr   r8   Úabsr   Ú	_writeerrr7   Ú	_flusherr)r*   ÚnowÚtopicÚposÚitemÚunitÚtotalÚ	termwidthÚheadZneedprogressÚtailZ	indicatorÚaddÚsliceZwidZusedZ	progwidthZamtZbarÚprogÚoutr	   r	   r   Úshows   sˆ    





ÿþÿ
zprogbar.showc                 C   sH   | j r| jrt| jƒsd S |  dd|  ¡   ¡ |  ¡  | j rDd| _d S )Ns   %sr   r   )r1   r5   r   r   rQ   rH   rR   r>   r	   r	   r   ÚclearÀ   s    zprogbar.clearc                 C   s<   t | jƒsd S | j dd¡r&|  ¡  n
|  d¡ |  ¡  d S )Nr   s   clear-completeó   
)r   r   r   ra   rQ   rR   r>   r	   r	   r   ÚcompleteÉ   s    


zprogbar.completec                 C   s   t | jjjƒ d S r   )r%   r   r   Úflushr>   r	   r	   r   rR   Ò   s    zprogbar._flusherrc                 C   s   t | jjj|ƒ d S r   )r%   r   r   Úwrite)r*   Úmsgr	   r	   r   rQ   Õ   s    zprogbar._writeerrc                 C   s&   | j  ¡ }tt| j jdd|dƒ|ƒS )Nr   s   width)Údefault)r   rY   ÚminrL   r4   )r*   Ztwr	   r	   r   rH   Ø   s    
zprogbar.widthc           
      C   s\   |d u rdS | j | }|| }|| }|dkrX|| j|  }|||  | d }	t|	ƒS dS )Nr   r   r   )r0   r/   r    )
r*   rT   rU   rX   rS   Ú
initialposÚtargetÚdeltaÚelapsedr   r	   r	   r   rN   Ü   s    
zprogbar.estimatec                 C   s@   | j | }|| }|| j|  }|dkr<tdƒ|| |f S dS )Nr   s	   %d %s/secr   )r0   r/   r   )r*   rT   rU   rW   rS   ri   rk   rl   r	   r	   r   rO   è   s    
zprogbar.speedc                 C   s2   | j du s&| j| j ks&|| j | jkr*dS dS dS )z?Check if conditions are met to print - e.g. changedelay elapsedNTF)r7   r6   r5   r;   )r*   rS   r	   r	   r   Ú
_oktoprintð   s    ÿ
ýûzprogbar._oktoprintc                 C   sn   | j }|dkrdS || j|  }||krj|| j|  }|| | }|dk rNdS || | j|< || | j|< dS )a±  Adjust 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
        r   Ngš™™™™™¹?)r=   r/   r0   )r*   rT   rS   rU   Zintervalrl   rk   Znewdeltar	   r	   r   Ú_calibrateestimateý   s    zprogbar._calibrateestimater   Nc                 C   sØ   |d u r|   |¡ d S t ¡ }| j  || jvrP|| j|< || j|< | j |¡ ||||f| j|< || _|  	|||¡ || j
 | jkr¶| jr¶|  |¡r¶|| _
| j||g| j| ¢R Ž  W d   ƒ n1 sÊ0    Y  d S r   )Ú
closetopicr2   r(   r-   r/   r0   Úappendr.   r6   rn   r5   r9   rm   r`   )r*   rT   rU   rV   rW   rX   rS   r	   r	   r   Úprogress  s     




zprogbar.progressc                 C   sº   | j   | j |d ¡ | j |d ¡ | j |d ¡ | jr\| jd |kr\| jr\|  ¡  |  ¡  || jv r˜| jd | j 	|¡… | _| jr’| jd | _
nd | _
W d   ƒ n1 s¬0    Y  d S )Nr   éÿÿÿÿ)r(   r/   Úpopr0   r.   r-   r1   rc   r)   Úindexr7   )r*   rT   r	   r	   r   ro   )  s    
zprogbar.closetopic)r   r   N)Ú__name__Ú
__module__Ú__qualname__r+   r)   r`   ra   rc   rR   rQ   rH   rN   rO   rm   rn   rq   ro   r	   r	   r	   r   r&   X   s   M		
r&   )Z
__future__r   r"   r'   r2   Zi18nr   Ú r   r   r   r    r%   Úobjectr&   r	   r	   r	   r   Ú<module>   s   2
