
    	^c              	          d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZmZ dZi Z e	j        e          Zi Z e	j        e          Z edd	d
            eddd            eddd
            eddd            eddd             eddd             eddd            ej                    Z G d d          Zd Zd Z edddd ed          fg ed          ej        d !          d"             ZdS )#a{  log repository events to a blackbox for debugging

Logs event information to .hg/blackbox.log to help debug and diagnose problems.
The events that get logged can be configured via the blackbox.track and
blackbox.ignore config keys.

Examples::

  [blackbox]
  track = *
  ignore = pythonhook
  # dirty is *EXPENSIVE* (slow);
  # each log entry indicates `+` if the repository is dirty, like :hg:`id`.
  dirty = True
  # record the source of log messages
  logsource = True

  [blackbox]
  track = command, commandfinish, commandexception, exthook, pythonhook

  [blackbox]
  track = incoming

  [blackbox]
  # limit the size of a log file
  maxsize = 1.5 MB
  # rotate up to N log files when the current one gets too big
  maxfiles = 3

  [blackbox]
  # Include microseconds in log entries with %f (see Python function
  # datetime.datetime.strftime)
  date-format = %Y-%m-%d @ %H:%M:%S.%f

    N)_)hex)encodingloggingutil	registrar)dateutilprocutils   ships-with-hg-core   blackbox   dirtyF)default   maxsizes   1 MB	   logsource   maxfiles      trackc                      dgS N   * r       0/usr/lib/python3/dist-packages/hgext/blackbox.py<lambda>r   `   s    TF r      ignorec                  
    g dS )N)s	   chgservers	   cmdservers	   extensionr   r   r   r   r   r   e   s    >>> r      date-formatr   c                   &    e Zd Zd Zd Zd Zd ZdS )blackboxloggerc                 .   || _         t          |                    dd                    | _        t          |                    dd                    | _        |                    dd          | _        |                    dd          | _        d| _	        d S )Nr
   r   r   r   r   F)
_reposet
configlist_trackedevents_ignoredevents	configint	_maxfilesconfigbytes_maxsize_inlog)selfuirepos      r   __init__zblackboxlogger.__init__m   sz    
!"--X"F"FGG!"--Y"G"GHHk;??{J??r   c                 8    d| j         v o|| j        vp|| j         v S r   )r"   r#   )r)   events     r   trackedzblackboxlogger.trackedu   s/    D''LE9L,L*d))	*r   c                 ~    | j         rd S d| _         	 |                     ||||           d| _         d S # d| _         w xY w)NTF)r(   _log)r)   r*   r.   msgoptss        r   logzblackboxlogger.logz   sU     ; 	F	 IIb%d+++DKKK%DKs   3 	<c                    |                     dd          }|                    dd          }|rt          j        ||          }nt          j        |d          d d         }t	          j                    }dt	          j                    z  }	d}
| j        d          }|                                }d		                    d
 |D                       }|
                    dd          r|                    ddd          rd	}
|
                    dd          rd|z  }nd}	 d}||||
|	||f}t          j        || j        j        d| j        | j                  5 }|                    ||z             d d d            n# 1 swxY w Y   ng# t$          t&          f$ rS}| j                                         |                    dt/          j        |j                  z             Y d }~d S d }~ww xY w| t4          _        d S )Ns   devels   default-dater
   r   s   %Y-%m-%d %H:%M:%S.%fs   %dr      +c                 P    g | ]#}t          |                                          $S r   )r   node).0ps     r   
<listcomp>z'blackboxlogger._log.<locals>.<listcomp>   s&    8881QVVXX888r   r   TF)missingmergebranchr   s    [%s]s   %s %s @%s%s (%s)%s> %s   blackbox.log)namemaxfilesmaxsizes*   warning: cannot write to blackbox.log: %s
)
configdateconfigr   datestrr	   getusergetpidr   parentsjoin
configbooldirtyr   openlogfilevfsr%   r'   writeIOErrorOSErrorr"   cleardebugr   
strtolocalstrerror_lastloggerlogger)r)   r*   r.   r2   r3   r   
dateformatdateuserpidchangedctxrI   revsrcfmtargsfperrs                      r   r1   zblackboxlogger._log   sg   --/::YY{N;;
 	K#GZ88DD
 #G-DEEcrcJD!!ho'''j++--ii8888899==h// 	CIIe 5> 5
 5
 	 G==l33 	U"CCC	+C$Wc3<D(
$   % t$$$% % % % % % % % % % % % % % % ! 	 	 	%%'''HH>%cl334   FFFFF	 "s=   8F E9-F 9E==F  E=F G)AG$$G)N)__name__
__module____qualname__r,   r/   r4   r1   r   r   r   r   r   l   sP          * * *

  
  
 +" +" +" +" +"r   r   c                 <    |                      dt                     d S )Nr
   )	setloggerrV   )r*   s    r   
uipopulateri      s    LLk*****r   c                     |                                 sd S t          | |          }|                     d|           t          j        |t          _        |j                            d           d S )Nr
   r@   )localr   rh   rV   rW   _wlockfreeprefixadd)r*   r+   rW   s      r   	reposetuprn      sn     ::<<  B%%FLLf%%% !#o.....r      ls   limit
   s   the number of events to shows   hg blackbox [OPTION]...T)helpcategory	helpbasicc                    |j                             d          sdS |                    d          }|                     dd          }|                                                    d          }d}g }t          |          D ]9}	||k    r n0t          j        d|	          r|dz  }|                    |	           :| 	                    d
                    t          |                               dS )	z!view the recent repository eventsr@   Nlimit   r   
r   s8   ^\d{4}[-/]\d{2}[-/]\d{2} \d{2}:\d{2}:\d{2}(.\d*)? .*> .*   )rN   existsgetreadsplitreversedrematchappendstatusrJ   )
r*   r+   revsr3   rt   rb   linescountoutputlines
             r   blackboxr      s     8???++ HHWE	/4	(	(BGGIIOOE""EEF  E>>E 8H$
 
 	 QJEdIIejj&))**+++++r   )__doc__r}   mercurial.i18nr   mercurial.noder   	mercurialr   r   r   mercurial.utilsr   r	   
testedwithcmdtablecommandconfigtable
configitemproxyloggerrV   r   ri   rn   CATEGORY_MAINTENANCEr   r   r   r   <module>r      s  " "J 
			                     
        #

)
H
%
%!Y!+..
 

   
 
   
 
   
 
   
 
N   
 
>>   
 
; 4 4 4 4%k%''E" E" E" E" E" E" E" E"P+ + +/ / /( 		xQQ>??@ A !!-  , , , , ,r   