
    q&fr              	          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 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y)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-corec                   $    e Zd Zd Zd Zd Zd Zy)blackboxloggerc                     || _         t        |j                  dd            | _        t        |j                  dd            | _        |j                  dd      | _        |j                  dd      | _        d| _	        y )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__zblackboxlogger.__init__J   sd    
!"--X"FG!"--Y"GHk;?{J?    c                 ^    d| j                   v xr || j                  vxs || j                   v S )N   *)r   r   )r   events     r   trackedzblackboxlogger.trackedR   s8    D'''LE9L9L,L*d)))	*r   c                 |    | j                   ry d| _         	 | j                  ||||       d| _         y # d| _         w xY w)NTF)r   _log)r   r   r    msgoptss        r   logzblackboxlogger.logW   s;     ;;	 IIb%d+DK%DKs   2 	;c           	      b   |j                  dd      }|j                  dd      }|j                  dd      }|rt        j                  ||      }nt        j                  |d      d d }t        j                         }	dt        j                         z  }
d	}| j                  d    }|j                         }d
j                  |D cg c]  }t        |j                                c}      }|j                  dd      r|j                  ddd      rd
}|j                  dd      rd|z  }nd	}	 d}||	|||
||f}t        j                  || j                  j                   d| j"                  | j$                        5 }||z  }|j'                  |       |r|j)                  |       d d d        | t:        _        y c c}w # 1 sw Y   xY w# t*        t,        f$ rU}| j.                  j1                          |j3                  dt5        j6                  |j8                        z         Y d }~y d }~ww xY w)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IOErrorOSErrorr   cleardebugr   
strtolocalstrerror_lastloggerlogger)r   r   r    r$   r%   default
dateformatdebug_to_stderrdateuserpidchangedctxr7   prevsrcfmtargsfperrs                        r   r#   zblackboxlogger._logc   s   --/:YY{N;
--5GH##GZ8D
 ##G-DEcrJD!hoo''jj++-ii81QVVX89==h/CIIe 5> 5
 G==l3U"CC	+C$Wc3<D((

$ 
& Dj"LL%
&& "? 9
& 
& ! 	%%'HH>%%cll34 	s8    F9.AG
 ;*F>%G
 >GG
 
H.AH))H.N)__name__
__module____qualname__r   r!   r&   r#    r   r   r   r   I   s    *

 /"r   r   c                 0    | j                  dt               y )Nr   )	setloggerrE   )r   s    r   
uipopulater\      s    LLk*r   c                     |j                         sy t        | |      }| j                  d|       t        j                  |t        _        |j
                  j                  d       y )Nr   r-   )localr   r[   rE   rF   _wlockfreeprefixadd)r   r   rF   s      r   	reposetupra      sV     ::< B%FLLf% !#o.r   r      ls   limit
   s   the number of events to shows   hg blackbox [OPTION]...T)helpcategory	helpbasicc                    |j                   j                  d      sy|j                  d      }|J |j                  dd      }|j                         j	                  d      }d}g }t        |      D ]5  }	||k\  r n.t        j                  d|	      r|dz  }|j                  |	       7 | j                  dj                  t        |                   y)	z!view the recent repository eventsr-   Nlimit   r   
r   s8   ^\d{4}[-/]\d{2}[-/]\d{2} \d{2}:\d{2}:\d{2}(.\d*)? .*> .*   )r<   existsgetreadsplitreversedrematchappendstatusr8   )
r   r   revsr%   rg   rT   linescountoutputlines
             r   blackboxry      s     88???+HHWE	/4	(BGGIOOE"EEF E> 88H$
 QJEd IIejj&)*+r   )__doc__rp   mercurial.i18nr   mercurial.noder   	mercurialr   r   r   mercurial.utilsr   r	   
testedwithcmdtablecommandproxyloggerrE   r   r\   ra   CATEGORY_MAINTENANCEry   rY   r   r   <module>r      s   "J 
   
 #

)

H
%%k%%'I" I"X+/( 		xQ>?@  !--,,r   