\x89\x50\x4E\x47\x0D\x0A\x1A\x0A PNG  \x89\x50\x4E\x47\x0D\x0A\x1A\x0A  13\c@@sdZddlmZddlZddlZddlmZddlmZddl m Z m Z m Z m ZmZddlmZmZdZiZe jeZiZe jeZed d d eed d d d ed dd eed dd ded dd ddadZdZdZdZed dddedfgeddejde dZ!dS(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 = * # 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 i(tabsolute_importN(t_(thex(tencodingtpycompatt registrartuitutil(tdateutiltprocutilsships-with-hg-coretblackboxtdirtytdefaulttmaxsizes1 MBt logsourcetmaxfilesittrackcC@sdgS(Nt*((((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pytSsc @sfd}jdd}d}|dkryj|}Wntk r\qX|j|krj|}jdd}xLtj|dddD]1}|d d ||dfd d ||fqW|d |d |dko|d qn|d S(Nc@syj|WnBtk rU}|jtjkrVjd||jfqVnXy|rrj||nWnEtk r}|jtjkrjd|||jfqnXdS(Ns warning: cannot remove '%s': %s s(warning: cannot rename '%s' to '%s': %s (tunlinktOSErrorterrnotENOENTtdebugtstrerrortrename(toldpathtnewpathterr(Rtvfs(s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pytrotateYs  R R s blackbox.logiRiiRs%s.%dRs.1ta(t configbyteststatRtst_sizetjoint configintRtxrange( RRRR tnametsttpathRti((RRs4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyt _openlogfileXs"    c@s5d|jffdY|_t_dS(Nt blackboxuic@sPeZedZejdZfdZfdZdZ RS(cS@sFd}t|dd}|rB|j}|jdsBd}qBn|S(Nt_bbrepot.(tNonetgetattrRtisdir(tselfRtrepo((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyt_bbvfs|s  cS@s|jddS(NR R(t configlist(R1((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyRsc@sEt|j|||jrA|jdddj|ndS(NRs%st(tsuperRt debugflagtlogR#(R1tmsgtopts(R+(s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyRs c@sWt|j|||d|jkr>||jkr>dS|jrP|}nt}|s`dS|j}|ssdSt|dd}t s|r|ant|dtrdSt|_ |j dd}t j |d}t j} dt j} |d|d } d } d } |r|d}|j}d jg|D]}t|j^qA} |jd dr|jdtdtdtrd } qn|jd drd|}nd }yNd}|| | | | || f}t||}|j||WdQXWn6ttfk rI}|jdtj|jn Xt|_ dS(NRR,t_bbinlogtdevels default-dates%Y/%m/%d %H:%M:%Ss%diis (unknown)R5t+R R tmissingtmergetbranchRs [%s]s%s %s @%s%s (%s)%s> %ss*warning: cannot write to blackbox.log: %s (R6R8RR3tlastuiR/R.tFalsetTrueR;t configdateRtdatestrR tgetusertgetpidtparentsR#Rtnodet configboolR R*twritetIOErrorRRRt strtolocalR(R1teventR9R:RRR2R tdatetusertpidt formattedmsgtrevtchangedtctxRHtptsrctfmttargstfpR(R+(s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyR8sV         .   cS@s ||_dS(N(R,(R1R2((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pytsetrepos( t__name__t __module__tpropertyR3Rt propertycacheRRR8R[((R+(s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyR+{s  ;(t __class__tuimodR(R((R+s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pytwrapuizsR cC@st|dS(N(Rb(R((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pytuisetupscC@s[|jsdStj|drG|j|tdkrG|aqGn|jjddS(NR[s blackbox.log(tlocalRt safehasattrR[RAR.t_wlockfreeprefixtadd(RR2((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyt reposetups    tltlimiti sthe number of events to showshg blackbox [OPTION]...t helpcategoryt helpbasicc O@s|jjdsdS|jd}|jdd}|jjd}d}g}xPt|D]B} ||kr{Pntjd| r|d7}n|j| qeW|j dj t|dS( s&view the recent repository events s blackbox.logNRjtrs is+^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} .*> .*i( RtexiststgettreadtsplittreversedtretmatchtappendtstatusR#( RR2trevsR:RjRZtlinestcounttoutputtline((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyR s   ("t__doc__t __future__RRRstmercurial.i18nRtmercurial.nodeRt mercurialRRRRRaRtmercurial.utilsRR t testedwithtcmdtabletcommandt configtablet configitemRBR.RAR*RbRcRhtCATEGORY_MAINTENANCERCR (((s4/usr/lib64/python2.7/site-packages/hgext/blackbox.pyt$s@  (        " V