o ]Lb@s8dZddlmZddlZddlmZddlmZddlm Z m Z m Z ddl m Z mZdZiZe eZiZe eZed d d d ed d dd ed dd d ed ddd ed dddd ed dddd ed ddd e ZGdddeZddZddZed dd d!ed"fged#ejd$d%d&d'ZdS)(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 )absolute_importN)_)hex)encoding loggingutil registrar)dateutilprocutilsships-with-hg-coreblackboxdirtyF)defaultmaxsizes1 MB logsourcemaxfilestrackcCsdgSN*rrr0/usr/lib/python3/dist-packages/hgext/blackbox.pyasrignorecCsgdS)N)s chgservers cmdservers extensionrrrrrrfs date-formatc@s,eZdZddZddZddZddZd S) blackboxloggercCsP||_t|dd|_t|dd|_|dd|_|dd|_d|_ dS)Nr rrrr F) _reposet configlist_trackedevents_ignoredevents configint _maxfiles configbytes_maxsize_inlog)selfuireporrr__init__ns  zblackboxlogger.__init__cCsd|jvo ||jvp||jvSr)rr)r%eventrrrtrackedvszblackboxlogger.trackedcCs6|jrdSd|_z|||||Wd|_dSd|_w)NTF)r$_log)r%r&r)msgoptsrrrlog{s zblackboxlogger.logc Csp|dd}|dd}|rt||}n t|ddd}t}dt} d} |jd} | } d d d | D} | dd rN| j d dddrNd } | ddrYd|}nd}z2d}||| | | ||f}t j ||jjd|j|jd}|||Wdn1swYWn%ttfy}z|j|dt|jWYd}~dSd}~ww|t_dS)Nsdevels default-dater rs%Y-%m-%d %H:%M:%S.%fs%dr+cSsg|]}t|qSr)rnode).0prrr sz'blackboxlogger._log..r TF)missingmergebranchrs [%s]s%s %s @%s%s (%s)%s> %s blackbox.log)namemaxfilesmaxsizes*warning: cannot write to blackbox.log: %s ) configdateconfigrdatestrr getusergetpidrparentsjoin configbooldirtyr openlogfilevfsr!r#writeIOErrorOSErrorrcleardebugr strtolocalstrerror _lastloggerlogger)r%r&r)r,r-r dateformatdateuserpidchangedctxrArevsrcfmtargsfperrrrrr+sV         zblackboxlogger._logN)__name__ __module__ __qualname__r(r*r.r+rrrrrms  rcCs|dtdS)Nr ) setloggerrN)r&rrr uipopulatesr`cCsB|sdSt||}|d|tjdur|t_|jddS)Nr r8)localrr_rNrO_wlockfreeprefixadd)r&r'rOrrr reposetups   rdlslimit sthe number of events to showshg blackbox [OPTION]...T) helpcategory helpbasicc Os|jdsdS|d}|dd}|d}d}g}t|D]} ||kr*ntd| r4|d7}|| q"| d t|dS) z!view the recent repository eventsr8Nlimitr rs8^\d{4}[-/]\d{2}[-/]\d{2} \d{2}:\d{2}:\d{2}(.\d*)? .*> .*) rFexistsgetreadsplitreversedrematchappendstatusrB) r&r'revsr-rirZlinescountoutputlinerrrblackboxs     r{)__doc__ __future__rrrmercurial.i18nrmercurial.noder mercurialrrrmercurial.utilsrr testedwithcmdtablecommand configtable configitem proxyloggerrNobjectrr`rdCATEGORY_MAINTENANCEr{rrrrsp $     H