a +b@sddlmZddlZddlmZmZddlmZmZm Z dddZ dd Z d d Z Gd d d e ZGddde ZGddde ZdS))absolute_importN)encodingpycompat)dateutilprocutil stringutilc sfdd}|dkrz|}Wnty6Ynf0|j|kr|}t|dddD]$}|d||dfd||fdq^|||dko|dd|d d d S) z{Open log file in append mode, with optional rotation If maxsize > 0, the log file will be rotated up to maxfiles. c sz|WnJtyX}z2|jtjkrDd|t|jfWYd}~n d}~00z|rl||WnLty}z4|jtjkrd||t|jfWYd}~n d}~00dS)Ns warning: cannot remove '%s': %s s(warning: cannot rename '%s' to '%s': %s ) unlinkOSErrorerrnoENOENTdebugrZ strtolocalstrerrorrename)oldpathnewpatherruivfs;/usr/lib64/python3.9/site-packages/mercurial/loggingutil.pyrotates&  zopenlogfile..rotaterrs%s.%d)rrs.1aF)Zmakeparentdirs)statr st_sizejoinrZxrange) rrnamemaxfilesmaxsizerstpathirrr openlogfiles    r$cCs"tjdd}t}d|||fS)Ns%Y/%m/%d %H:%M:%S)formats %s (%d)> %s)rZdatestrrgetpid)msgdatepidrrr_formatloglineCs r*cCsd|vp||vS)N*r)eventtrackedrrr _matcheventIsr.c@s*eZdZdZd ddZddZddZd S) fileloggerz;Basic logger backed by physical file with optional rotationrcCs&||_||_t||_||_||_dSN)_vfs_nameset_trackedevents _maxfiles_maxsize)selfrrr-rr rrr__init__Ps  zfilelogger.__init__cCs t||jSr0r.r4r7r,rrrr-Wszfilelogger.trackedc Cst|}zHt||j|j|j|jd}||Wdn1sD0YWn>ty}z&|d|jt |fWYd}~n d}~00dS)N)rr cannot write to %s: %s ) r*r$r1r2r5r6writeIOErrorr r forcebytestr)r7rr,r'optslinefprrrrlogZs",zfilelogger.logN)rr__name__ __module__ __qualname____doc__r8r-rBrrrrr/Ms r/c@s(eZdZdZddZddZddZdS) fileobjectloggerz'Basic logger backed by file-like objectcCs||_t||_dSr0)_fpr3r4)r7rAr-rrrr8oszfileobjectlogger.__init__cCs t||jSr0r9r:rrrr-sszfileobjectlogger.trackedc Csnt|}z|j||jWnFtyh}z.|dt|jjt|fWYd}~n d}~00dS)Nr;) r*rIr<flushr=r rr>r)r7rr,r'r?r@rrrrrBvs  zfileobjectlogger.logNrCrrrrrHlsrHc@s(eZdZdZddZddZddZdS) proxyloggerz4Forward log events to another logger to be set latercCs d|_dSr0)logger)r7rrrr8szproxylogger.__init__cCs|jduo|j|Sr0)rLr-r:rrrr-szproxylogger.trackedcCs$|jdusJ|j||||dSr0)rLrB)r7rr,r'r?rrrrBszproxylogger.logNrCrrrrrKsrK)rr)Z __future__rr rrZutilsrrrr$r*r.objectr/rHrKrrrr s  *