ó
žÜ¬Qc           @   sÆ   d  Z  d d l m Z m Z d d l m Z d d l Z d d l Z d d l Z i  Z	 e j
 e	 ƒ Z
 d Z d a d „  Z d „  Z d „  Z e
 d	 d
 d d e d ƒ f g e d ƒ ƒ d „  ƒ Z d S(   s   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 config key.
Examples::

  [blackbox]
  track = *

  [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

iÿÿÿÿ(   t   utilt   cmdutil(   t   _Nt   internalc            s,   d |  j  f ‡  f d †  ƒ  Y‰  ˆ  |  _  d  S(   Nt
   blackboxuic              s;   e  Z e j d  „  ƒ Z d „  Z ‡  f d †  Z d „  Z RS(   c         S   s   |  j  d d d g ƒ S(   Nt   blackboxt   trackt   *(   t
   configlist(   t   self(    (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyR   +   s    c            s  ‡  f d †  } ˆ  j  d d ƒ } ˆ  j d d d ƒ } | d k rt j | j ƒ  ƒ } | j | k r| j } | j ƒ  ˆ  j d d d	 ƒ } xI t	 | d
 d
 d ƒ D]1 } | d d | | d
 f d d | | f ƒ q¥ W| d | d | d k où | d ƒ ˆ  j  d d ƒ } qn  | S(   Nc            s¿   y t  j | ƒ WnB t k
 rU } | j t j k rV ˆ  j d | | j f ƒ qV n Xy | rr t  j |  | ƒ n  WnE t k
 rº } | j t j k r» ˆ  j d | |  | j f ƒ q» n Xd  S(   Ns    warning: cannot remove '%s': %s
s(   warning: cannot rename '%s' to '%s': %s
(   t   ost   unlinkt   OSErrort   errnot   ENOENTt   debugt   strerrort   rename(   t   oldpatht   newpatht   err(   R	   (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt   rotate0   s    		s   blackbox.logt   aR   t   maxsizei   i    t   maxfilesi   i   iÿÿÿÿR   s   %s.%dR   s   .1(
   t	   _bbopenert   configbytesR
   t   fstatt   filenot   st_sizet   namet   closet	   configintt   xrange(   R	   R   t   fpR   t   stt   pathR   t   i(    (   R	   s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt   _openlogfile/   s     	
c   	         s]  t  ˆ  |  ƒ j | | | Ž d |  j k r> | |  j k r> d  St j |  d ƒ r\ |  j } nv t j |  d ƒ rÌ y |  j ƒ  |  _ Wn< t t f k
 r¿ } |  j	 d | j
 ƒ |  ` d  |  _ n X|  j } n t } | rYt j d  d ƒ } t j ƒ  } | d | d } y | j d | | | f ƒ Wn' t k
 rO} |  j	 d | j
 ƒ n X| a n  d  S(	   NR   t	   _blackboxR   s*   warning: cannot write to blackbox.log: %s
s   %Y/%m/%d %H:%M:%Si    i   s	   %s %s> %s(   t   supert   logR   R    t   safehasattrR'   R&   t   IOErrorR   R   R   R   t   Nonet   lastblackboxt   datestrt   getusert   write(	   R	   t   eventt   msgt   optsR   R   t   datet   usert   formattedmsg(   R   (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyR)   O   s2    		c         S   s   | j  |  _ d  S(   N(   t   openerR   (   R	   t   repo(    (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt   setrepor   s    (   t   __name__t
   __module__R    t   propertycacheR   R&   R)   R9   (    (   R   (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyR   *   s   	 #(   t	   __class__(   t   ui(    (   R   s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt   wrapui)   s    Kc         C   s   t  |  ƒ d  S(   N(   R?   (   R>   (    (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt   uisetupw   s    c         C   s6   | j  ƒ  s d  St j |  d ƒ r2 |  j | ƒ n  d  S(   NR9   (   t   localR    R*   R9   (   R>   R8   (    (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt	   reposetupz   s    s	   ^blackboxt   lt   limiti
   s   the number of events to shows   hg blackbox [OPTION]...c   
      O   sÔ   t  j j | j d ƒ ƒ s d S| j d ƒ } | j d d ƒ } | j ƒ  j d ƒ } d } g  } xP t | ƒ D]B }	 | | k r„ Pn  t	 j
 d |	 ƒ r£ | d 7} n  | j |	 ƒ qn W|  j d j t | ƒ ƒ ƒ d S(	   s&   view the recent repository events
    s   blackbox.logNRD   t   rs   
i    s+   ^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} .*> .*i   (   R
   R$   t   existst   joint   getR7   t   readt   splitt   reversedt   ret   matcht   appendt   status(
   R>   R8   t   revsR3   RD   R   t   linest   countt   outputt   line(    (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyR   „   s    (   t   __doc__t	   mercurialR    R   t   mercurial.i18nR   R   R
   RL   t   cmdtablet   commandt
   testedwithR,   R-   R?   R@   RB   R   (    (    (    s2   /sys/lib/python2.7/site-packages/hgext/blackbox.pyt   <module>   s   $	N		
