
    6h              	         S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	J
r
Jr  SSKJrJr  Sr0 r\R"                  " \5      r\
R$                  " 5       r " S	 S
5      rS rS r\" SSSS\" S5      4/\" S5      \R.                  SS9S 5       rg)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

    )annotationsN)_)hex)encodingloggingutil	registrar)dateutilprocutils   ships-with-hg-corec                  ,    \ rS rSrS rS rS rS rSrg)blackboxloggerJ   c                    X l         [        UR                  SS5      5      U l        [        UR                  SS5      5      U l        UR                  SS5      U l        UR                  SS5      U l        SU l	        g )N   blackboxs   tracks   ignores   maxfiless   maxsizeF)
_reposet
configlist_trackedevents_ignoredevents	configint	_maxfilesconfigbytes_maxsize_inlog)selfuirepos      0/usr/lib/python3/dist-packages/hgext/blackbox.py__init__blackboxlogger.__init__K   sb    
!"--X"FG!"--Y"GHk;?{J?    c                t    SU R                   ;   =(       a    XR                  ;  =(       d    XR                   ;   $ )N   *)r   r   )r   events     r   trackedblackboxlogger.trackedS   s4    D'''LE9L9L,L*)))	*r    c                    U R                   (       a  g SU l          U R                  XX45        SU l         g ! SU l         f = f)NTF)r   _log)r   r   r#   msgoptss        r   logblackboxlogger.logX   s7     ;;	 IIb+DK%DKs   5 	>c           	        UR                  SS5      nUR                  SS5      nUR                  SS5      nU(       a  [        R                  " XV5      nO[        R                  " US5      S S n[
        R                  " 5       n	S[
        R                  " 5       -  n
S	nU R                  S    nUR                  5       nS
R                  U Vs/ s H  n[        UR                  5       5      PM     sn5      nUR                  SS5      (       a  UR                  SSSS9(       a  S
nUR                  SS5      (       a  SU-  nOS	n SnXXU
UU4n[        R                  " UU R                  R                   SU R"                  U R$                  S9 nUU-  nUR'                  U5        U(       a  UR)                  U5        S S S 5        U [8        l        g s  snf ! , (       d  f       N= f! [*         aV  nU R,                  R/                  5         UR1                  S[2        R4                  " UR6                  5      -  5         S nAg S nAff = f)Ns   devels   default-dater   s   date-formats   debug.to-stderrs   %Y-%m-%d %H:%M:%S.%fs   %dr       +s   dirtyTF)missingmergebranchs	   logsources    [%s]s   %s %s @%s%s (%s)%s> %s   blackbox.log)namemaxfilesmaxsizes*   warning: cannot write to blackbox.log: %s
)
configdateconfig
configboolr	   datestrr
   getusergetpidr   parentsjoinr   nodedirtyr   openlogfilevfsr   r   write	write_errOSErrorr   cleardebugr   
strtolocalstrerror_lastloggerlogger)r   r   r#   r(   r)   default
dateformatdebug_to_stderrdateuserpidchangedctxr<   prevsrcfmtargsfperrs                        r   r'   blackboxlogger._logd   s   --/:YY{N;
--5GH##G8D
 ##G-DEcrJD!hoo''jj++-ii81QVVX89==h//CIIe 5> 5
 G==l33U"CC	+Cc3<D((

$ Dj"LL%& "? 9   	%%'HH>%%cll34 	s>   #GA	G' /G=G' 
G$ G' $G' '
I1AII)r   r   r   r   r   r   N)	__name__
__module____qualname____firstlineno__r   r$   r*   r'   __static_attributes__ r    r   r   r   J   s    *

 /"r    r   c                0    U R                  S[        5        g )Nr   )	setloggerrI   )r   s    r   
uipopulaterc      s    LLk*r    c                    UR                  5       (       d  g [        X5      nU R                  SU5        [        R                  c  U[        l        UR
                  R                  S5        g )Nr   r2   )localr   rb   rI   rJ   _wlockfreeprefixadd)r   r   rJ   s      r   	reposetuprh      sV     ::<< B%FLLf% !#o.r    r      ls   limit
   s   the number of events to shows   hg blackbox [OPTION]...T)helpcategory	helpbasicc                   UR                   R                  S5      (       d  gUR                  S5      nUc   eUR                  SS5      nUR                  5       R	                  S5      nSn/ n[        U5       H<  n	Xt:  a    O6[        R                  " SU	5      (       a  US-  nUR                  U	5        M>     U R                  SR                  [        U5      5      5        g)	z!view the recent repository eventsr2   Nlimit   r   
r   s8   ^\d{4}[-/]\d{2}[-/]\d{2} \d{2}:\d{2}:\d{2}(.\d*)? .*> .*   )rA   existsgetreadsplitreversedrematchappendstatusr=   )
r   r   revsr)   rn   rX   linescountoutputlines
             r   blackboxr      s     88???++HHWE	/4	(BGGIOOE"EEF> 88H$
 
 QJEd   IIejj&)*+r    )__doc__
__future__r   rw   mercurial.i18nr   mercurial.noder   	mercurialr   r   r   mercurial.utilsr	   r
   
testedwithcmdtablecommandproxyloggerrI   r   rc   rh   CATEGORY_MAINTENANCEr   r`   r    r   <module>r      s   "H # 	   
 #



H
%%%'I" I"X+/( 		xQ>?@  !--,,r    