
    q&f`                     |    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y)    N   )encoding)dateutilprocutil
stringutilc                 6     fd}|dkD  rs	 j                  |      }|j                  |k\  rRj                  |      }t        |dz
  dd      D ]  } |d||dz
  fz  d||fz           |||dkD  xr |dz          	  |dd	
      S # t        $ r Y w xY w)z{Open log file in append mode, with optional rotation

    If maxsize > 0, the log file will be rotated up to maxfiles.
    c           	         	 j                  |       	 |rj                  | |       y y # t        $ rZ}|j                  t        j                  k7  r3j	                  d|t        j                  |j                        fz         Y d }~ud }~ww xY w# t        $ r`}|j                  t        j                  k7  r9j	                  d|| t        j                  |j                        fz         Y d }~y Y d }~y 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   s    	JJw	

7G,   	yyELL(8 3 3CLL ABC	  	yyELL(@)<)<S\\)JKL  )	s-   + B 	BAB		B	C:AC55C: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 zzW$xx~x!|Q3 A (D!a%= 8 (D!9 4
 tX\-JdUlKtT%00  		s   B 	BBc                 f    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   s1    #78D
//
CT3,,,    c                     d|v xs | |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y)
fileloggerz;Basic logger backed by physical file with optional rotationc                 \    || _         || _        t        |      | _        || _        || _        y N)_vfs_nameset_trackedevents	_maxfiles_maxsize)selfr   r    r4   r!   r"   s         r   __init__zfilelogger.__init__N   s*    	
!'l!r/   c                 .    t        || j                        S r9   r5   r=   r@   r3   s     r   r4   zfilelogger.trackedU       5$"5"566r/   c                 j   t        |      }	 t        || j                  | j                  | j                  | j
                        5 }|j                  |       d d d        y # 1 sw Y   y xY w# t        $ r=}|j                  d| j                  t        j                  |      fz         Y d }~y 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66s;<= 	s5   8A, A A,  A)%A, )A, ,	B253B--B2Nr   r   __name__
__module____qualname____doc__rA   r4   rN   r2   r/   r   r7   r7   K   s    E 7r/   r7   c                   "    e Zd ZdZd Zd Zd Zy)fileobjectloggerz'Basic logger backed by file-like objectc                 2    || _         t        |      | _        y r9   )_fpr<   r=   )r@   rM   r4   s      r   rA   zfileobjectlogger.__init__m   s    !'lr/   c                 .    t        || j                        S r9   rC   rD   s     r   r4   zfileobjectlogger.trackedq   rE   r/   c                 R   t        |      }	 | j                  j                  |       | j                  j                          y # t        $ rZ}|j                  dt        j                  | j                  j                        t        j                  |      fz         Y d }~y 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"
	HHNN4 HHNN 	HH+++DHHMM:++C0 	s   5A 	B&AB!!B&NrP   r2   r/   r   rV   rV   j   s    1+7r/   rV   c                   "    e Zd ZdZd Zd Zd Zy)proxyloggerz4Forward log events to another logger to be set laterc                     d | _         y r9   )logger)r@   s    r   rA   zproxylogger.__init__   s	    r/   c                 X    | j                   d uxr | j                   j                  |      S r9   )r_   r4   rD   s     r   r4   zproxylogger.tracked   s%    {{$&E4;;+>+>u+EEr/   c                 \    | j                   J | j                   j                  ||||       y r9   )r_   rN   )r@   r   r3   r+   rK   s        r   rN   zproxylogger.log   s(    {{&&&E3-r/   NrP   r2   r/   r   r]   r]      s    >F.r/   r]   rO   )r    r   utilsr   r   r   r&   r.   r5   r7   rV   r]   r2   r/   r   <module>rd      sG     '1T-/ > 2. .r/   