^c&. ddlmZddlmZmZddlmZmZmZm Z mZm Z m Z m Z m Z mZmZmZddlmZmZejZejZejZejZejZejZddZdZdZed zed d d d Zeded<iZe j eZ e ddhdZ!e dddhdZ"e ddhdZ#e ddhdZ$e dddhdZ%e ddhdZ&e dddhd Z'e d!ddhd"Z(e d#dhd$Z)e d%dhd&Z*e d'd(dhd)Z+e d*d(hd+Z,e d,dhd-Z-e d.dhd/Z.dd1Z/dd2Z0e d3hd4d5Z1e d6d7hd8Z2e d9dd7hd:Z3e d;dd7hd<Z4e d=dd7hd>Z5e d?dhd@Z6e dAhdBdCZ7dDZ8dEZ9dFZ:e dGdHdIZ;e dJdHdKZ<e dLhdBdMZ=dNZ>e dOhdBdPZ?e dQhdBdRZ@dSZAddheA_Be dTddhdUZCe dVhdWdXZDdYZEe dZddhd[ZFe d\ddhd]ZGe d^dhd_ZHe d`dhdaZIe dbd(dhdcZJe dddehdfZKe dgdhdhZLe diddhdjZMe dkdhdlZNe dmdehdnZOe dohdpdqZPe drddhdsZQe dtddhduZRe dvdhdwZSe dxdhdyZTe dzdhd{ZUe d|dhd}ZVe d~dhdZWe ddhdZXe dddhdZYe ddhdZZe ddhdZ[e ddhdZ\e ddhdZ]e dddhdZ^e dd(hdZ_e ddhdZ`e ddhdZae dd(hdZbe dddhdZcdZdeeZfdS))_)hexwdirrev) diffutilencodingerrorhbisecti18nobsutilpatchpycompat registrarscmutil templateutilutil) stringutilurlutilNcF ||d||d ||d}d}|#|d|zz }tj|dn tj||vr dd d d gfi||<|| }|g}|rp|}|vr| fd  D}|r8 d d d t|Df|< fd  D}t|dkrN|d d|ddkrt|\} } } n( fd} t|| \} } } n |d \} } } nW#t$rJ|||d DYawxYw| | dz| f|<|p|S)z8return date, distance and name for the latest tag of revrepoctxcaches latesttagsN-snullcg|]=}|r&|dk0|;|>S)slocal)tagtype).0tmatchrepos 6/usr/lib/python3/dist-packages/mercurial/templatekw.py z!getlatesttags..DsY    Q %)LLOOx$?$?EE!HH$? $?$?$?cg|]}|Sr&)rrs r"r#z!getlatesttags..Js0I0I0Iq0I0I0Ir$cDg|]}|Sr&rev)rp latesttagss r"r#z!getlatesttags..Ms&@@@QZ(@@@r$rc^|dd}HdD}d||}t|dz}n8d|}t|}| |dgS)Nrrc6g|]}|Sr&r()rcs r"r#z.getlatesttags..key..Ys $D$D$DQUUWW$D$D$Dr$ only(%ld, %s)rs only(%d, %s))r)parentsrevslen)xtagprevschangeschangessincetagctxr!s r"keyzgetlatesttags..keyUsd1g7799,$D$Dckkmm$D$D$DE&*ii0@%&M&MG.1'llQ.>OO&*iiC&P&PG.1'llO"1 0!A$77r$)r9c3>K|]}|VdSNr(rr*s r" z getlatesttags..is*77A777777r$)resourcer stringmatcherralwaysr)poptagsdatesortedr0r2maxKeyErrorappendextend)contextmappingpatterncache cachenamer)todorBptagspdatepdistptagr9r8r+r r!s @@@@r" getlatesttagsrS*s   GW - -D   7F + +C   Wh / /EITG^# (11!4 Ay 12iy!J ''))C 5D ,1hhjj *   3i     XXZZ     !hhjjmQ0I0IF4LL0I0I0IIJsO  @@@@#++--@@@E5zzA~~8A;%(1+--*-U&E5$$ 8 8 8 8 8 8*-U)<)<)<&E5$$%*1X"ud    KK    KK77777 7 7 7 H    D0 3Y ,1Z c?s(B F66AH  H ctj}|d}ttd|Dt j|dS)z"Return a dict of log column labelssbookmark: %s branch: %s changeset: %s copies: %s date: %s extra: %s=%s files+: %s files-: %s files: %s instability: %s manifest: %s obsolete: %s parent: %s phase: %s summary: %s tag: %s user: %s cFg|]}|dddS):rr)split)rss r"r#z!getlogcolumns..s+ ? ? ?QQWWT1  a ? ? ?r$T)r identitydictzip splitlinesr r)rcolumnss r" getlogcolumnsr^oswAa G&  ? ?'*<*<*>*> ? ? ? F7OO & &t , ,    r$s{rev}:{node|formatnode} s{name} ({source})s {key}={value}s{key}={value|stringescape})parentmanifest file_copyenvvarextrarbsfilecopysauthorr)requiresc"t||S)zAlias for ``{user}``)showuserrIrJs r" showauthorris GW % %%r$sbisectrc||d}||d}tj||S)z'String. The changeset bisection status.rr)r>r labelnode)rIrJr!r8s r" showbisectrmsH   GW - -D   7F + +C =sxxzz * **r$branchcV||d}|S)zMString. The name of the branch on which the changeset was committed. r)r>branchrIrJr8s r" showbranchrrs'   7F + +C ::<<r$branchesc||d}|}|dkrt||d|gdSt||dgdS)zList of strings. The name of the branch on which the changeset was committed. Will be empty if the branch name was default. (DEPRECATED) rsdefaultrnrsplural)r>rp compatlist)rIrJr8rps r" showbranchesrxsp   7F + +C ZZ\\F  Wi&+     gw 2k J J JJr$s bookmarksc||d}||d}|}|jfd}t||d|}t |||t jS)z{List of strings. Any bookmarks associated with the changeset. Also sets 'active', the name of the active bookmark. rrc|dS)N)bookmarksactivescurrentr&)vactives r"zshowbookmarks..saFOOr$r{)r> bookmarks_activebookmark_showcompatlist_hybridr rY)rIrJr!r8rmakemapfr}s @r" showbookmarksrs|   GW - -D   7F + +C I  !FOOOOG+yAAA 1i(*; < <.s*JJJ4TXXZZ..JJJr$rschild)element)r>childrenrw)rIrJr8 childrevss r" showchildrenrsV   7F + +CJJ3<<>>JJJI +y(   r$scurrentbookmarkc"t||S)zUString. The active bookmark, if it is associated with the changeset. (DEPRECATED))showactivebookmarkrhs r"showcurrentbookmarkrs gw / //r$sactivebookmarkc||d}||d}|j}|r||vr|SdS)zDString. The active bookmark, if it is associated with the changeset.rrr$)r>rr)rIrJr!r8r}s r"rrsZ   GW - -D   7F + +C  !F &CMMOO++ 3r$sdatec~||d}tj|dS)zrrCrqs r"showdaters9   7F + +C  SXXZZ ; ; ;;r$sdescc||d}|}t|tjr8tjtj|St|tjr&tj|S|S)z.String. The text of the changeset description.r) r> description isinstancerlocalstrtolocal fromlocalstrip safelocalstr)rIrJr8rXs r"showdescriptionrs   7F + +C A!X&'' 21 5 5 ; ; = =>>> Ax, - -$QWWYY///wwyyr$sdiffstatuic^||d}||d}tj|ddi}||}t jt j|}t j|\}}} } } dt|| | fzS)ziString. Statistics of changes with the following format: "modified files: +added/-removed lines" rrsnoprefixF)optss %d: +%d/-%d) r>r diffalloptsdiffr diffstatdatar iterlines diffstatsumr2) rIrJuir8diffoptsrstatsmaxnamemaxtotaladdsremovesbinarys r" showdiffstatr s   '5 ) )B   7F + +C#Be(<==H 888 " "D  t~d33 4 4E/4/@/G/G,GXtWf SZZw7 77r$envvarsc||d}|tjfdt Dt ||ddS)z5A dictionary of environment variables. (EXPERIMENTAL)rc3,K|]}||fVdSr;r&)rkenvs r"r=zshowenvvars..s+99CF 999999r$rcrru)r>exportableenvironrsortdictrD compatdict)rIrJrrs @r" showenvvarsrsn   '5 ) )B   C -9999VC[[999 9 9C gw 3z J J JJr$extrasc,||d}|tjfdt DfdfdD}t ||d|d}t |fdS) zRList of dicts with key, value entries of the 'extras' field of this changeset.rc3,K|]}||fVdSr;r&)rrextrass r"r=zshowextras..&s+BBaAvay>BBBBBBr$c||dS)N)skeysvaluer&rrs r"r~zshowextras..'sfQi88r$c&g|] }|Sr&r&)rrrs r"r#zshowextras..(s!$$$$$$r$rdrrucBd|tj|fzSNs%s=%s)r escapestrrs r"r~zshowextras...s (a!5fQi!@!@AAr$)r>extrarrrDrr)rIrJr8r.rrrs @@r" showextrasr s   7F + +C YY[[F ]BBBB6&>>BBB B BF8888G$$$$V$$$A(AiHHHA  AAAA   r$s _fast_rankch||d}|}|dSd|zS)zthe rank of a changeset if cached The rank of a revision is the size of the sub-graph it defines as a head. Equivalently, the rank of a revision `r` is the size of the set `ancestors(r)`, `r` included. rNs%d)r> fast_rank)rIrJr8ranks r"rr2s:   7F + +C ==??D |t 4<r$Fc||d}||d}d|vs |d|kr5|||||}||d<||d<|dS)Nrrevcaches filestatus filestatusall) listignored listclean listunknown)r>p1status)rIrJlistallr8revcachestats r"_getfilestatusrAs   7F + +C55HH$$1A(BW(L(Lvvxx WW  #'%,!" M ""r$c$||d}d|vs |d|krbt|||}ix|d<}ttjd|D]&\}|fd|D'|dS)Nrs filestatusmaprrsMAR!?ICc3 K|]}|fV dSr;r&)rrchars r"r=z$_getfilestatusmap..Ss'44At9444444r$)r>rr[r iterbytestrupdate)rIrJrrrstatmapfilesrs @r"_getfilestatusmaprMs55Hx''84D+E+O+Ogw@@@/11!"Wx3J??FF 5 5KD% NN4444e444 4 4 4 4 $ %%r$s file_copies>rrrrcf||d}||d}||d}||dd}|.d|vrtj||d<|d}||}t j||d|S) zLList of strings. Files copied in this changeset with their sources. rrrrcopiesNs getcopiesrb)r>getr getcopiesfnrcompatfilecopiesdict)rIrJr!r8rLcopies getcopiess r"showfilecopiesrWs   GW - -D   7F + +C   Wh / /E   g{ 3 3 7 7 B BF ~ u $ $")"5d";";E, ,' 3  ,,  r$sfile_copies_switchrc||ddpg}tj||d|S)z^List of strings. Like "file_copies" but displayed only if the --copied switch is set. rrrb)r>rrr)rIrJrs r"showfilecopiesswitchrosJ   g{ 3 3 7 7 B B HbF  ,,  r$s file_addsc||d}tj||d|S)z/List of strings. Files added by this changeset.rsfile_add)r>rcompatfileslist filesaddedrqs r" showfileaddsrzsA   7F + +C  '+s~~'7'7  r$s file_delsc||d}tj||d|S)z1List of strings. Files removed by this changeset.rsfile_del)r>rr filesremovedrqs r" showfiledelsrsC   7F + +C  '+s'7'7'9'9  r$s file_modsc||d}tj||d|S)z2List of strings. Files modified by this changeset.rsfile_mod)r>rr filesmodifiedrqs r" showfilemodsrsC   7F + +C  '+s'8'8':':  r$sfilesc||d}tj||d|S)zRList of strings. All files modified, added, or removed by this changeset. rsfile)r>rrrrqs r" showfilesrs8   7F + +C  ''399;; O OOr$s graphnode>rrrc||d}||d}||d}t|||S)zUString. The character representing the changeset node in an ASCII revision graph.rrr)r> getgraphnode)rIrJr!r8rLs r" showgraphnodersU   GW - -D   7F + +C   Wh / /E c5 ) ))r$cBt|||pt|Sr;)getgraphnodecurrentgetgraphnodesymbol)r!r8rLs r"rrs" tS% 0 0 K4Fs4K4KKr$c|j}|d|jkr |dd}||vrdS|d}|Jddlm}|j|}|r|j |j f}nd}||d<||vrdSdS)Nr@s merge_nodes) mergestater&%r$) dirstater0nullidrlrrreadunresolvedcountlocalother)r!r8rLwpnodes merge_nodes mergestatemodrs r"rrsm##%%GqzT[  "1"+ xxzzWtii//   5 5 5 5 5 5&166t<.s(] r$rrrV) separator)rSrrr rY)rIrJrKrrBrr+s @r"rrsdw99J G a=D,MMMA 1dGX%6 7 77r$slatesttagdistancec.t||dS)z(Integer. Longest path to the latest tag.r)rSrhs r"showlatesttagdistancers ' * *1 --r$schangessincelatesttagct||dd}||d|i}t||S)z-Integer. All ancestors not in the latest tag.rrr)rS overlaymapr)rIrJr4s r"showchangessincelatesttagr!sF  ) )! ,Q /C  63-88G  1 11r$cj||d}||d}d}|g}||d}| d}d|D}t |d|||zS)Nrrrrrc6g|]}|Sr&r(r<s r"r#z(_showchangessincetag..s ///A///r$r/)r>r)symbolr0r2r1)rIrJr!r8offsetr1r4s r"rrs   GW - -D   7F + +C F GGII;D ..& ) )C wwyy///// tyy)455 6 6 ??r$rac||d}||d}|}| |jj}t|jjn)|j|t|| |d}| d|}tj |d|fdS)NrrrevnoderacdS)Nr'r&)r3mhexmrevs r"r~zshowmanifest..(std;;r$) r> manifestnode nodeconstantswdiridrwdirhex manifestlogr)rr processr hybriditem)rIrJr!r8mnoderr+r,s @@r" showmanifestr5s   GW - -D   7F + +C     E }")!)##E**5zz  4$*G*GHHG W--A  " 4;;;;;  r$sobsfate>rrrcZt||}||d}||d}g}|||D]E}tj|||d|dt j}||Ft||d|S)Nrr successorsmarkerssfate) showsuccsandmarkersr>tovaluer obsfateprinterrformatchangeidrGrw)rIrJsuccsandmarkersrr!valuesr3r|s r" showobsfater?,s *'7;;O   '5 ) )B   GW - -D F  $ $Wg 6 6  " a &* w7M    a gw 8 88r$c||d}||d}|j|}|dS|||}t |||j||S)znamesrrlrw templatename)rIrJ namespacer!r8nsrAs r" shownamesrEAs   GW - -D   7F + +C  " "B z  HHT388:: & &E "/5   r$s namespacesc ||d ||d}tj d} jD]g\}}| |}t ||d|}t||||tj  |<ht ||dt } fd}t| |tj S)zBDict of lists. Names attached to this changeset per namespace.rrcfdS)Ncd|j|iS)Nname)rB)r|rDs r"r~z5shownamespaces..makensmapfn..[s'1boq9r$r&)rDs`r" makensmapfnz#shownamespaces..makensmapfnYs99999r$rI namespacec^||j|jj|jdS)N)rKsnamessbuiltins colorname)rAbuiltin colorname)rD namespacesr!s r"rzshownamespaces..makemapds4 n 2.*R.2    r$) r>rrrAitemsrlrrr rYlist) rIrJr8rJrrDrArrrOr!s @@r"shownamespacesrRPs   GW - -D   7F + +CJ:::!!##NN2sxxzz** GWgu = =5++b//8;LMM 1 ,Z8H8HIIA       1j'8+< = ==r$snegrevc||d}|}||dkrdS||d}|t|z S)zmInteger. The repository-local changeset negative revision number, which counts in the opposite direction.rNrr)r>r)r2)rIrJr8r)r!s r" shownegrevrTos]   7F + +C ''))C {cAggt   GW - -D T?r$r)cV||d}|S)zUString. The changeset identification hash, as a 40 hexadecimal digit string. r)r>rrqs r"shownoderV{s'   7F + +C 7799r$obsoletec^||d}|rdSdS)z9String. Whether the changeset is obsolete. (EXPERIMENTAL)rrWr$)r>r rqs r" showobsoleterYs3   7F + +C ||~~{ 3r$sonelinesummarycddlm}||d}||d}|||S)zString. A one-line summary for the ctx (not including trailing newline). The default template be overridden in command-templates.oneline-summary.r)cmdutilrr)rr[r>format_changeset_summary)rIrJr[rr8s r"showonelinesummaryr]sV    '5 ) )B   7F + +C  + +B 4 44r$pathfctxcV||d}|S)zDString. Repository-absolute path of the current file. (EXPERIMENTAL)r_)r>pathrIrJfctxs r"showpathrd'   GW - -D 99;;r$speerurlsc||d}|jjtj|j}t jd|Dfd}fd}td||S)zcA dictionary of repository locations defined in the [paths] section of your configuration file.rc3.K|]\}}||jfVdSr;)rawloc)rrr*s r"r=zshowpeerurls..s,==41a!QX======r$c|}d|i}t|dkre|dj|d<|dj}t jt |}||t j}|D]_}t jt |j}|j|d<|||g|d<`|S)NrIrrsurlsurls)r2rh suboptionsrPrrrDr)rpsdsub_opts path_dictr*pathss r"rzshowpeerurls..makemaps 1X aL r77a<<1 AfI!u'--//H}VH%5%566H HHX   MOO  % %A}VAL,>,>,@,@%A%ABBH !If    X & & &#AgJJr$cd||fzSrr&)rurlss r" format_onez showpeerurls..format_ones1d1g,&&r$N)r>rror list_pathsrrr)rIrJr! all_pathsrrrrorqs @@r" showpeerurlsrus   GW - -D GME"47++I ===9=== = =D ''''' 4w 3 33r$s predecessorsc(||d||d}ttj|}t jt|}td|fdfdS)zDReturns the list of the closest visible predecessors. (EXPERIMENTAL)rrNcd|iSNrr&r3r!s r"r~z"showpredecessors..647#r$c8tj|Sr;rr<rys r"r~z"showpredecessors..'(a11r$) r>rDr closestpredecessorsrlr maplistrr)rIrJr8 predecessorsr!s @r"showpredecessorsrs   GW - -D   7F + +C'5dCHHJJGGHHL#C66L  ####1111   r$sreporootc<||d}|jS)z5String. The root directory of the current repository.r)r>root)rIrJr!s r" showreporootrs!   GW - -D 9r$ssizecV||d}|S)z:Integer. Size of the current file in bytes. (EXPERIMENTAL)r_)r>sizerbs r"showsizerrer$sstatus>rr_rctj||d}tj|||}|sdSt||}||vrt||d}||S)z7String. Status code of the current file. (EXPERIMENTAL)r^NTr)r runsymbol stringifyrr)rIrJrars r" showstatusrsy  !'7G < ..s%%%Q#a&&%%%r$r&)rsss r"r#z&showsuccessorssets..s'666"%%"%%%666r$Ncd|iSrxr&rys r"r~z$showsuccessorssets..647+r$c8tj|Sr;r|rys r"r~z$showsuccessorssets..s'0a99r$c0tj|Sr;)rr)rlrIrJs r"renderz"showsuccessorssets..renders%gw:::r$c3RKdfd|DVdS)Ns; c3.K|]}|VdSr;r&)rrlrs r"r=z2showsuccessorssets..gen..s+11q111111r$)join)datars r"genzshowsuccessorssets..gens:jj1111D1111111111r$c d|iS)Ns successorsetr&)r3s r"r~z$showsuccessorssets.. s OQ#7r$) r>r r successorssetsrlrrGr rY) rIrJr8rssetsrhrrr!s `` @@r"showsuccessorssetsrs+   GW - -D   7F + +C D ||~~ &tSXXZZFFF66666  B++++9999 A KKNNNN;;;;;;22222  D 4779J  r$ssuccsandmarkersc ||d ||d}tj |}|g}g}|D]}|d}d|D}td| fd fd}g}|dD]}t |d } t d |d D} d} |d t d |d D} | | f|dd z| fz|ddz} || |||dtj|S)zReturns a list of dict for each final successor of ctx. The dict contains successors node id in "successors" keys and the list of obs-markers from ctx to the set of successors in "markers". (EXPERIMENTAL) rrNr7c,g|]}t|Sr&rrs r"r#z'showsuccsandmarkers..$s111c!ff111r$cd|iSrxr&rys r"r~z%showsuccsandmarkers..(svtAw'r$c8tj|Sr;r|rys r"r~z%showsuccsandmarkers..)sg,T!W55r$r8rc34K|]}t|VdSr;rrs r"r=z&showsuccsandmarkers..0s(11qCFF111111r$rc34K|]}t|VdSr;rrs r"r=z&showsuccsandmarkers..3s("8"8a3q66"8"8"8"8"8"8r$r)r7r8) r>r successorsandmarkersrrtuplerGr mappinglist)rIrJr8r>ri successors finalmarkersmhexprechexsucs hexparents newmarkerr!s @r"r9r9s   GW - -D   7F + +C  )$ 4 4F ~ D KK}% 11j111    ' ' ' ' 5 5 5 5    : + +A!A$iiG11AaD11111GJt""8"81Q4"8"8"888  '*QqsV3zmCaeKI    * * * * JLIIJJJJ  #D ) ))r$sp1c||d}tjd|itS)zChangeset. The changeset's first parent. ``{p1.rev}`` for the revision number, and ``{p1.node}`` for the identification hash.rtmpl)r>r mappingdictr _changeidtmplrqs r"showp1r<<   7F + +C  #VSVVXX$6] K K KKr$sp2c||d}tjd|itS)zChangeset. The changeset's second parent. ``{p2.rev}`` for the revision number, and ``{p2.node}`` for the identification hash.rr)r>rrp2rrqs r"showp2rDrr$sp1revcz||d}|S)zInteger. The repository-local revision number of the changeset's first parent, or -1 if the changeset has no parents. (DEPRECATED)r)r>rr)rqs r" showp1revrL/   7F + +C 6688<<>>r$sp2revcz||d}|S)zInteger. The repository-local revision number of the changeset's second parent, or -1 if the changeset has no second parent. (DEPRECATED)r)r>rr)rqs r" showp2revrTrr$sp1nodecz||d}|S)zString. The identification hash of the changeset's first parent, as a 40 digit hexadecimal string. If the changeset has no parents, all digits are 0. (DEPRECATED)r)r>rrrqs r" showp1noder\/   7F + +C 6688<<>>r$sp2nodecz||d}|S)zString. The identification hash of the changeset's second parent, as a 40 digit hexadecimal string. If the changeset has no second parent, all digits are 0. (DEPRECATED)r)r>rrrqs r" showp2nodererr$sparentsc||d||d}tj|}d|D}d|D}t||d|}t ||fdfdt S) zList of strings. The parents of the changeset in "rev:node" format. If the changeset has only one "natural" parent (the predecessor revision) nothing is shown.rrc6g|]}|Sr&r(r<s r"r#zshowparents..vs $ $ $QUUWW $ $ $r$cg|]C}d|fd|fd|fgDS)r(r)phase)r)rphasestrr<s r"r#zshowparents..wsV  !%%'' Waeegg.1::<<0HIr$r`cd|iSrxr&rys r"r~zshowparents..rzr$c8tj|Sr;r|rys r"r~zshowparents..r}r$)keytype)r>rmeaningfulparentsrrint)rIrJr8pctxsr5r0rr!s @r" showparentsrns   GW - -D   7F + +C  %dC 0 0E $ $e $ $ $EG )W==A   ####1111    r$rcV||d}|S)z!String. The changeset phase name.r)r>rrqs r" showphasers'   7F + +C <<>>r$sphaseidxcV||d}|S)z.Integer. The changeset phase index. (ADVANCED)r)r>phaserqs r" showphaseidxrs'   7F + +C 99;;r$r(cV||d}tj|S)z8Integer. The repository-local changeset revision number.r)r>rintrevrqs r"showrevrs)   7F + +C >#  r$ssubreposcx||d}|j}|st||dgS|jpi}g}|D]-}||vs||||kr||.|D]}||vr||t||dt |S)z:List of strings. Updated subrepositories in the changeset.rssubrepo)r>substaterwrrGrD)rIrJr8r psubstatesubrepossubs r" showsubreposrs   7F + +C|H <'7J;;;!'RIH!! i  8C=IcN#B#B OOC !! h   OOC gw F84D4D E EEr$tagsc$t||dS)z8List of strings. Any tags associated with the changeset.r)rErhs r"showtagsrs Wgw / //r$s termwidthcV||d}|S)z+Integer. The width of the current terminal.r)r> termwidthrIrJrs r" showtermwidthrs'   '5 ) )B <<>>r$susercV||d}|S)z/String. The unmodified author of the changeset.r)r>userrqs r"rgrgs'   7F + +C 88::r$ instabilitiescz||d}t||d|dS)zYList of strings. Evolution instabilities affecting the changeset. (EXPERIMENTAL) rs instabilityrru)r>rw instabilitiesrqs r"showinstabilitiesrsK   7F + +C      r$s verbositych||d}|jrdS|jrdS|jrdSdS)zOString. The current output verbosity in 'debug', 'quiet', 'verbose', or ''.rsdebugsquietsverboser$)r> debugflagquietverbosers r" showverbosityrsK   '5 ) )B |x x z 3r$s whyunstablecT ||d ||d}dtj |}|D]G}|dr0|d}t dd|D fd fd}||d<Hd }t j||d S) zRList of dicts explaining all instabilities of a changeset. (EXPERIMENTAL) rrcXdtj||fzS)Ns%s (%s))rr<rrs r" formatnodez#showwhyunstable..formatnodes%W3C88#,,..IIIr$sdivergentnodesNc6g|]}|Sr&r)rdnodes r"r#z#showwhyunstable..s 111111r$cd|iSrxr&rys r"r~z!showwhyunstable..rr$c&|Sr;r&)r3rr!s r"r~z!showwhyunstable..s**T!W--r$sM{instability}:{if(divergentnodes, " ")}{divergentnodes} {reason} {node|short} )rsep)r>r whyunstablerrrr) rIrJr8entriesentrydnodesdnhybridrrr!s @@r"showwhyunstablers   GW - -D   7F + +CJJJ!$,,G 0 0 99& ' ' 0,-F11&111++++----- H (0E# $ !   #G$E B B BBr$cX|jD]\}}|t|<dS)z1Load template keyword from specified registrarobjN)_tablerPkeywords)rextname registrarobjnamefuncs r" loadkeywordr s9")//11 dr$r;)F)gr rrlrrrrrrr r r r rrrrutilsrrhybridr hybriddict hybridlistrrwrrSr^r defaulttemplrtemplatekeywordrirmrrrxrrrrrrrrrrrrrrrrrrrrrrrrrrrr!r _requiresr5r?rErRrTrVrYr]rdrurrrrrr9rrrrrrrrrrrrrrgrrrr r> i18nfunctionsr&r$r"rs                                 $  $  $  $ .BBBBJ@+ t#&+  )6 [ +)+H55fX...&&/.& gv%6777++87+fX.../.x000 K K10 K&(9::: = =;: =x00010#w.?@@@00A@0 "gv->???@?F8,,,<<-,<F8,,,  -, v777 8 887 8ug...KK/.KfX.../."&222  32  # # # #&&&&EEE*&+???@?(=>>>?>(=>>>?>(=>>>?>VH---PP.-P(C(C(CDDD**ED*LLL.,,,  -, B'''==('= (C(C(CDDD22ED2888&%0K0K0KLLL..ML. )4O4O4OPPP22QP2 @ @ @ #*6!2'8999:9$&>&>&>???99@?9(   '6):;;;>><;><gv%677787F8,,,-,x00010"eV_=== 5 5>= 5G9---.- y11144214>GV+<===  >= y11121 G9---.-%C%C%CDDD  ED "gv->???@?B#w.?@@@)*)*A@)*X&***LL+*L&***LL+*LVH---.-VH---.-fX.../.fX.../.w&788898,VH---.- x00010 6(+++,+ x000FF10F(GV#455500650 00010 F8,,,-, !VH555  65 000  10 7F*;<<<CC=<C<!! r$