ó žÜ¬Qc@sÆdZddlmZmZddlmZddlZddlZddlZiZ ej e ƒZ dZ da d„Zd„Zd„Ze d d d d ed ƒfgedƒƒd„ƒZdS(slog 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ÿÿÿÿ(tutiltcmdutil(t_Ntinternalcs,d|jf‡fd†ƒY‰ˆ|_dS(Nt blackboxuics;eZejd„ƒZd„Z‡fd†Zd„ZRS(cSs|jdddgƒS(Ntblackboxttrackt*(t configlist(tself((s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyR+scs‡fd†}ˆjddƒ}ˆjdddƒ}|dkrtj|jƒƒ}|j|kr|j}|jƒˆjddd ƒ}xIt |d d d ƒD]1}|d d ||d fdd ||fƒq¥W|d |d|dkoù|dƒˆjddƒ}qn|S(Ncs¿ytj|ƒWnBtk rU}|jtjkrVˆjd||jfƒqVnXy|rrtj||ƒnWnEtk rº}|jtjkr»ˆjd|||jfƒq»nXdS(Ns warning: cannot remove '%s': %s s(warning: cannot rename '%s' to '%s': %s (tostunlinktOSErrorterrnotENOENTtdebugtstrerrortrename(toldpathtnewpathterr(R (s2/sys/lib/python2.7/site-packages/hgext/blackbox.pytrotate0s  s blackbox.logtaRtmaxsizeiitmaxfilesiiiÿÿÿÿRs%s.%dRs.1( t _bbopenert configbytesR tfstattfilenotst_sizetnametcloset configinttxrange(R RtfpRtsttpathRti((R s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyt _openlogfile/s     c s]tˆ|ƒj|||Žd|jkr>||jkr>dStj|dƒr\|j}nvtj|dƒrÌy|jƒ|_Wn<ttfk r¿}|j d|j ƒ|` d|_nX|j}nt }|rYtjddƒ}tjƒ}|d|d}y|jd|||fƒWn'tk rO}|j d|j ƒnX|a ndS( NRt _blackboxRs*warning: cannot write to blackbox.log: %s s%Y/%m/%d %H:%M:%Siis %s %s> %s(tsupertlogRRt safehasattrR'R&tIOErrorR RRRtNonet lastblackboxtdatestrtgetusertwrite( R teventtmsgtoptsRRtdatetusert formattedmsg(R(s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyR)Os2       cSs|j|_dS(N(topenerR(R trepo((s2/sys/lib/python2.7/site-packages/hgext/blackbox.pytsetrepors(t__name__t __module__Rt propertycacheRR&R)R9((R(s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyR*s #(t __class__(tui((Rs2/sys/lib/python2.7/site-packages/hgext/blackbox.pytwrapui)sKcCst|ƒdS(N(R?(R>((s2/sys/lib/python2.7/site-packages/hgext/blackbox.pytuisetupwscCs6|jƒsdStj|dƒr2|j|ƒndS(NR9(tlocalRR*R9(R>R8((s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyt reposetupzs s ^blackboxtltlimiti sthe number of events to showshg blackbox [OPTION]...c OsÔtjj|jdƒƒsdS|jdƒ}|jddƒ}|jƒjdƒ}d}g}xPt|ƒD]B} ||kr„Pnt j d| ƒr£|d7}n|j | ƒqnW|j djt|ƒƒƒdS( s&view the recent repository events s blackbox.logNRDtrs is+^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} .*> .*i( R R$texiststjointgetR7treadtsplittreversedtretmatchtappendtstatus( R>R8trevsR3RDRtlinestcounttoutputtline((s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyR„s  (t__doc__t mercurialRRtmercurial.i18nRR R RLtcmdtabletcommandt testedwithR,R-R?R@RBR(((s2/sys/lib/python2.7/site-packages/hgext/blackbox.pyts$ N