
    	^c`                         d dl Z ddlmZ ddlmZmZmZ ddZd Zd Z	 G d d	          Z
 G d
 d          Z G d d          ZdS )    N   )encoding)dateutilprocutil
stringutilc                 V     fd}|dk    r	                      |          }|j        |k    r\                    |          }t          |dz
  dd          D ]} |d||dz
  fz  d||fz              |||dk    o|dz              n# t          $ r Y nw xY w |dd	
          S )z{Open log file in append mode, with optional rotation

    If maxsize > 0, the log file will be rotated up to maxfiles.
    c           	         	                      |           n]# t          $ rP}|j        t          j        k    r1                    d|t          j        |j                  fz             Y d }~nd }~ww xY w	 |r                    | |           d S d S # t          $ rX}|j        t          j        k    r8                    d|| t          j        |j                  fz             Y d }~d S Y d }~d S d }~ww xY w)Ns    warning: cannot remove '%s': %s
s(   warning: cannot rename '%s' to '%s': %s
)	unlinkOSErrorerrnoENOENTdebugr   
strtolocalstrerrorrename)oldpathnewpatherruivfss      7/usr/lib/python3/dist-packages/mercurial/loggingutil.pyrotatezopenlogfile.<locals>.rotate   sK   	JJw 	 	 	yEL((8 3CL A ABC  		 -

7G,,,,,- - 	 	 	yEL((@)<S\)J)JKL         )(((((	s.    
A3AA..A37B 
C5AC00C5r   r   s   %s.%d)r   r   s   .1   aF)makeparentdirs)statst_sizejoinranger   )	r   r   namemaxfilesmaxsizer   stpathis	   ``       r   openlogfiler&      s        & {{	L$B zW$$xx~~x!|Q33  AF (D!a%= 8 (D!9 4     tX\-JdUlKKKK  	 	 	D	 3tT%0000s   B 
BBc                 b    t          j        d          }t          j                    }d||| fz  S )Ns   %Y/%m/%d %H:%M:%S)formats   %s (%d)> %s)r   datestrr   getpid)msgdatepids      r   _formatlogliner.   A   s5    #7888D
/

CT3,,,    c                     d|v p| |v S )N   * )eventtrackeds     r   _matcheventr5   G   s    7?.ew..r/   c                   &    e Zd ZdZddZd Zd ZdS )
fileloggerz;Basic logger backed by physical file with optional rotationr   c                 f    || _         || _        t          |          | _        || _        || _        d S N)_vfs_nameset_trackedevents	_maxfiles_maxsize)selfr   r    r4   r!   r"   s         r   __init__zfilelogger.__init__N   s0    	
!'ll!r/   c                 ,    t          || j                  S r9   r5   r=   r@   r3   s     r   r4   zfilelogger.trackedU       5$"5666r/   c                 d   t          |          }	 t          || j        | j        | j        | j                  5 }|                    |           d d d            d S # 1 swxY w Y   d S # t          $ r<}|                    d| j        t          j
        |          fz             Y d }~d S d }~ww xY w)N)r!   r"      cannot write to %s: %s
)r.   r&   r:   r;   r>   r?   writeIOErrorr   r   forcebytestr)r@   r   r3   r+   optslinefpr   s           r   logzfilelogger.logX   s%   c""		
                       	 	 	HH+:z6s;;<=        	s:   (A) AA) A  A) #A $A) )
B/31B**B/Nr   r   __name__
__module____qualname____doc__rA   r4   rN   r2   r/   r   r7   r7   K   sL        EE       7 7 7    r/   r7   c                   $    e Zd ZdZd Zd Zd ZdS )fileobjectloggerz'Basic logger backed by file-like objectc                 <    || _         t          |          | _        d S r9   )_fpr<   r=   )r@   rM   r4   s      r   rA   zfileobjectlogger.__init__m   s    !'llr/   c                 ,    t          || j                  S r9   rC   rD   s     r   r4   zfileobjectlogger.trackedq   rE   r/   c                 L   t          |          }	 | j                            |           | j                                         d S # t          $ rS}|                    dt          j        | j        j                  t          j        |          fz             Y d }~d S d }~ww xY w)NrG   )	r.   rX   rH   flushrI   r   r   rJ   r    )r@   r   r3   r+   rK   rL   r   s          r   rN   zfileobjectlogger.logt   s    c""
	HNN4   HNN 	 	 	HH++DHM::+C00        	s   3A 
B#ABB#NrP   r2   r/   r   rV   rV   j   sG        11+ + +7 7 7    r/   rV   c                   $    e Zd ZdZd Zd Zd ZdS )proxyloggerz4Forward log events to another logger to be set laterc                     d | _         d S r9   )logger)r@   s    r   rA   zproxylogger.__init__   s    r/   c                 H    | j         d uo| j                             |          S r9   )r_   r4   rD   s     r   r4   zproxylogger.tracked   s$    {$&E4;+>+>u+E+EEr/   c                 R    | j         J | j                             ||||           d S r9   )r_   rN   )r@   r   r3   r+   rK   s        r   rN   zproxylogger.log   s0    {&&&E3-----r/   NrP   r2   r/   r   r]   r]      sJ        >>  F F F. . . . .r/   r]   rO   )r    r   utilsr   r   r   r&   r.   r5   r7   rV   r]   r2   r/   r   <module>rd      s                 '1 '1 '1 '1T- - -/ / /       >       2. . . . . . . . . .r/   