^cRddZddlZddlZddlZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZiZejeZdZdZdZed d d ged ed fdddededfdddededfdddededfdddededfdd d!ed"fd#d$d!ed%fdd&d!ed'fdd(ded)ed*fg e jzed+ejd,-d.ZdS)/z6command to display statistics about repository historyN)_)open)cmdutilencoding logcmdutilpatchpycompat registrarscmutilsships-with-hg-corecd\}}dtj||||}d}|dD]k} |r| dr|dz }|r| dr|dz }<| drd }T| d rd}l||fS) NrrF +-@Td)joinrdiffnodesplit startswith) uirepoctx1ctx2fmatchaddedremovedrinhunkls -/usr/lib/python3/dist-packages/hgext/churn.py changedlinesr$%sNE7 88EJtTYY[[$))++vFF G GD F ZZ    all4((  QJEE   T**  qLGG \\$   FF \\$   F 7 rc  tjdrfd nFdpd tj  fd t dt dt i   fd }tj|d d d d }tj |\}}tj |||D]}   S)zCalculate stats dateformatc |\}}tjtjt ||z dd}t j|t jdS)Nr&) datedatetimetimegmtimefloatr strtolocalstrftime strfromlocal)ctxttzr)optss r#getkeyzcountrate..getkey:srHHJJEAr$dk%((R-&@&@!&DED& h3D4GHHII r oldtemplatetemplatec~|SN) pushbuffershow popbuffer)r1tmplrs r#r5zcountrate..getkeyEs- MMOOO IIcNNN<<>> !rs analyzings revisions)unittotalch|}|}||} dr% |dddzdf |<n|}t |dkr( t d|fzdS|d}t |||}dt |d|D |< dS)N changesets)rrrs$revision %d is a merge, ignoring... cg|] \}}||z SrC).0rr"s r# z+countrate..prep..]s MMM41aQMMMrr ) revstripgetparentslennoterr$zip increment)r1rrGkeyrJrlinesamapr5r4progressraterrs r#prepzcountrate..prepOs#ggiifSkk!!hhsC   88M " " N#t,,Q/!3Q7DIIkkmmG7||aBCCsfLMMM1:D T4f==EMM3txxV/D/De+L+LMMMDIrrevdatesincludesexclude)patsr4revspecr) include_pats exclude_pats) r byteskwargsrIr maketemplater makeprogressrrKwalkopts makewalkerr walkchangerevscomplete)rrrQrWr4rTwoptsrevsmakefilematcherr1r5rRrSr=s``` ` @@@@r# countratere5s   % %D xx "      xx''@488K+@+@'D$77 " " " " " "  ,a ooSYYH D$    V ']*%*%    E'1$>>D/%dD/4HH  KrschurnrrUs/count rate for the specified revision or revsetsREVrrVrs+count rate for revisions matching date specsDATEtr6s)template to group changesets (DEPRECATED)sTEMPLATETr7s{author|email}stemplate to group changesetsfr&s/strftime-compatible format for grouping by datesFORMATcrAFs"count rate by number of changesetssssorts$sort by key (default: sort by count)sdiffstats&display added/removed lines separatelysaliasessfile with email aliasessFILEs3hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]T) helpcategory inferrepocdi}|d}|sGtj|dr|d}|rt |dD]} |d|vrdpdd\}}|||<L#t$r>|}|r% td|zYwxYwtt||g|Ri| } | sdS|d r| n| d tt!d | Dpd t!d| D} d| z| z dz dz dz |drdzfd} n dzfd} fd| D]$\} } | | | %dS)ahistogram of changes to the repository This command will display a histogram representing the number of changed lines or revisions, grouped according to the given template. The default template will group changes by author. The --dateformat option may be used to group the results by date instead. Statistics are based on the number of changed lines, or alternatively the number of matching revisions if the --changesets option is specified. Examples:: # display count of changed lines for every committer hg churn -T "{author|email}" # display daily activity graph hg churn -f "%H" -s -c # display activity of developers by month hg churn -f "%Y-%m" -s -c # display count of lines changed in every year hg churn -f "%Y" -s # display count of lines changed in a time range hg churn -d "2020-04 to 2020-09" It is possible to map alternate email addresses to a main address by providing a file using the following format:: = Such a file may be specified with the --aliases option, otherwise a .hgchurn file will be looked for in the working directory root. Aliases will be split from the rightmost "=". c<|d|tj|z zzS)N )rcolwidth)sr"s r#padzchurn..pads"41x0333444raliasess.hgchurnsrb=Nrsskipping malformed alias: %s sortc2t|d |fS)Nrsum)xs r#zchurn..s#ad))Qr)rOc3:K|]\}}t|VdSr9rxrDkvs r# zchurn..s,11DAqQ111111rg?c3:K|]\}}t|VdSr9)rKr}s r#rzchurn..s,**TQ#a&&******rsassuming %i character terminal diffstatc |\}}d|d||fzd|zdd|zdfzS)Ns %s %15s %s%s s+%d/-%drsdiffstat.insertedrsdiffstat.deleted)label)namerrr charnummaxnamersrs r#formatzchurn..formatsz%NE7$D'""eW--.0DEE 0 002EFF ( rr(c td|t|dt|zfzS)Ns %s %6d %s *rx)rcountrrrss r#rzchurn..formatsE!D'""E wws5zz***% rc.t|zzSr9)int)rmaxcountwidths r#rzchurn..charnums55=H,---r)rIospathexistswjoinrrsplitrH ValueErrorwarnrlistreitemsrvr-max termwidthdebugwrite)rrrWr4rQrtr"aliasactualrSttywidthrrrrrrrsrs` @@@@@r#churnrrsp555 Dhhy!!G *rw~~djj&=&=>>***[)) gu%%  A  !);t)CtQ G G v&,llnnU[[]]##   GGIIFGGA?@@1DEEE    "dD84888488>>@@ A AD  xx1  // 000S11D11111229cH**T*****G||~~HHH 08 ;<<< w  "Q & *E xx                     ......&& e e$$%%%%&&s?ACADD)__doc__r*rr+mercurial.i18nrmercurial.pycompatr mercurialrrrrr r r cmdtablecommand testedwithr$rer^CATEGORY_MAINTENANCErrCrr#rs=< ######  ) H % % #     :::z      A@ A A AfII      A< = = AgJJ      A: ; ; AkNN      A- . . AkNN      A@ A A AiLL   }eQQ'L%M%MN wqq!HIIJ k5!!$M"N"NO j#qq!;<