
    6h                        S SK Jr  S SKrSSKJr  SSKJrJrJr  SS jr	S r
S r " S	 S
5      r " S S5      r " S S5      rg)    )annotationsN   )encoding)dateutilprocutil
stringutilc                2  ^ ^ U U4S jnUS:  aq   TR                  U5      nUR                  U:  aO  TR                  U5      n[        US-
  SS5       H  nU" SXxS-
  4-  SXx4-  S9  M     U" XsS:  =(       a    US-   S9  T" USS	S
9$ ! [         a     Nf = f)zsOpen log file in append mode, with optional rotation

If maxsize > 0, the log file will be rotated up to maxfiles.
c           	       >  TR                  U5         U(       a  TR                  X5        g g ! [         a\  nUR                  [        R                  :w  a4  TR	                  SU[
        R                  " UR                  5      4-  5         S nAN|S nAff = f! [         aa  nUR                  [        R                  :w  a9  TR	                  SX[
        R                  " UR                  5      4-  5         S nAg  S nAg S nAff = f)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rotateopenlogfile.<locals>.rotate   s    	JJw	

7,   	yyELL(8 3 3CLL ABC	  	yyELL(@)<)<S\\)JKL  )	s-   / B 
BABB
D"AC>>D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3A (Da%= 8 (D9 4 4
 t\-JdUlKtT%00  		s   B	 	
BBc                b    [         R                  " SS9n[        R                  " 5       nSXU 4-  $ )Ns   %Y/%m/%d %H:%M:%S)formats   %s (%d)> %s)r   datestrr   getpid)msgdatepids      r   _formatlogliner0   B   s/    #78D
//
CT,,,    c                "    SU;   =(       d    X;   $ )N   * )eventtrackeds     r   _matcheventr7   H   s    7?.e..r1   c                  .    \ rS rSrSrSS jrS rS rSrg)	
fileloggerL   z;Basic logger backed by physical file with optional rotationc                T    Xl         X l        [        U5      U l        X@l        XPl        g N)_vfs_nameset_trackedevents	_maxfiles_maxsize)selfr   r"   r6   r#   r$   s         r   __init__filelogger.__init__O   s"    	
!'l!r1   c                ,    [        XR                  5      $ r<   r7   r@   rC   r5   s     r   r6   filelogger.trackedV       5"5"566r1   c                r   [        U5      n [        UU R                  U R                  U R                  U R
                  S9 nUR                  U5        S S S 5        g ! , (       d  f       g = f! [         a>  nUR                  SU R                  [        R                  " U5      4-  5         S nAg S nAff = f)N)r#   r$      cannot write to %s: %s
)r0   r(   r=   r>   rA   rB   writer   r   r   forcebytestr)rC   r   r5   r-   optslinefpr   s           r   logfilelogger.logY   s    c"			

     	HH+::z66s;<= 	s5   5A. AA. 
A+'A. +A. .
B684B11B6)rA   rB   r>   r@   r=   Nr   r   	__name__
__module____qualname____firstlineno____doc__rD   r6   rR   __static_attributes__r4   r1   r   r9   r9   L   s    E 7r1   r9   c                  *    \ rS rSrSrS rS rS rSrg)fileobjectloggerk   z'Basic logger backed by file-like objectc                0    Xl         [        U5      U l        g r<   )_fpr?   r@   )rC   rQ   r6   s      r   rD   fileobjectlogger.__init__n   s    !'lr1   c                ,    [        XR                  5      $ r<   rG   rH   s     r   r6   fileobjectlogger.trackedr   rJ   r1   c                X   [        U5      n U R                  R                  U5        U R                  R                  5         g ! [         a\  nUR                  S[        R                  " U R                  R                  5      [        R                  " U5      4-  5         S nAg S nAff = f)NrL   )	r0   r`   rM   flushr   r   r   rN   r"   )rC   r   r5   r-   rO   rP   r   s          r   rR   fileobjectlogger.logu   s    c"
	HHNN4 HHNN 	HH+++DHHMM:++C0 	s   5A 
B)AB$$B))r`   r@   NrU   r4   r1   r   r]   r]   k   s    1+7r1   r]   c                  *    \ rS rSrSrS rS rS rSrg)proxylogger   z4Forward log events to another logger to be set laterc                    S U l         g r<   logger)rC   s    r   rD   proxylogger.__init__   s	    r1   c                b    U R                   S L=(       a    U R                   R                  U5      $ r<   )rl   r6   rH   s     r   r6   proxylogger.tracked   s%    {{$&E4;;+>+>u+EEr1   c                Z    U R                   c   eU R                   R                  XX45        g r<   )rl   rR   )rC   r   r5   r-   rO   s        r   rR   proxylogger.log   s$    {{&&&3-r1   rk   NrU   r4   r1   r   rh   rh      s    >F.r1   rh   rT   )
__future__r   r    r   utilsr   r   r   r(   r0   r7   r9   r]   rh   r4   r1   r   <module>ru      sJ    #  '1T-/ > 2. .r1   