Ë æ}„ÿ"lçãó¾—ddlZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z m Z mZmZddlmZmZmZmZmZmZmZmZm Z mZmZmZmZmZmZdd l m!Z!ejDd «Z#dHd „Z$d „Z%dHd „Z&Gd„d«Z'Gd„de'«Z(d„Z)dId„Z*d„Z+d„Z,dHd„Z-dHd„Z.d„Z/d„Z0d„Z1d„Z2d„Z3d„Z4d„Z5dHd„Z6dHd „Z7dJd!„Z8d"„Z9d#„Z:d$„Z;d%„Zd(„Z?d)„Z@d*d+he@_Ad,„ZBd-„ZCd*d+heC_Ad.„ZDd/„ZEd0„ZFd1„ZGd2„ZHd3„ZId4„ZJd5„ZKd6„ZLd7„ZMdKd8„ZNd9„ZOd:„ZPd;„ZQd<„ZRd=„ZSd>„ZTd?„ZUd@„ZVdA„ZWGdB„dCej°«ZYGdD„dEej:«ZZdF„Z[dG„Z\y)LéNé)Ú_)ÚhexÚshort)Úsetattré)Ú ErrorResponseÚHTTP_BAD_REQUESTÚHTTP_NOT_FOUNDÚ paritygen)ÚcontextÚdiffutilÚerrorÚmatchÚmdiffÚobsutilÚpatchÚpathutilÚpycompatÚscmutilÚtemplatefiltersÚ templatekwÚ templateutilÚuiÚutil)Ú stringutil))ózip)sapplication/ziprs.zipN)sgz)sapplication/x-gzipstgzs.tar.gzN)sbz2)sapplication/x-bzip2stbz2s.tar.bz2Ncóú—|jddd¬«}g}tj«D]:\}}||vs|jdd|zd¬«sŒ"|j ||d||dœ«Œ<t j |«S)Nówebs allow-archiveT©Ú untrustedsallowr)ótypes extensionónodesurl)Ú configlistÚ archivespecsÚitemsÚ configboolÚappendrÚ mappinglist)rÚnodeidÚurlÚallowedÚarchivesÚtypÚspecs ú;usr/lib/python3.12/site-packages/mercurial/hgweb/webutil.pyÚ archivelistr17s‹€Ø�m‰m˜FÐ$4ÀˆmÓE€GØ€Hä!×'Ñ'Ö)‰ ˆˆTØ �'‰>˜RŸ]™]Ø �H˜s‘N¨dð+õ ð �O‰Oà Ø"& q¡'Ø#Øñ õ ð *ô × #Ñ # HÓ -Ð-ócóŠ—|dddk7rd|z}|dddk(r|dd}tjj|«}|dk(ry|dzS)Nrró/éÿÿÿÿ)ÚosÚpathÚdirname)ÚpÚups r0r:r:KsV€Øˆˆ1€v�‚~Ø �1‰HˆØˆˆ€v�‚~Ø ˆcˆrˆFˆÜ �‰�‰˜Ó €BØ ˆT‚zØØ �‰9Ðr2c#óœK—|r2|–—|dk\r |dkrd}|–—|dkDsJ‚|dkDsJ‚||kr |dz}||krŒ d|z–—d|z–—|dz}Œ­w)Néé(é2ré ré©)ÚstepÚ firststeps r0Ú_navseqrDVszèø€ÙØŠØ ˜Š?˜y¨BšØˆIØŠOØ�aŠxˆˆxؘ1Š}Ј}Ø�iÒØ �B‰JˆDð�iÓà Ø�$‰hŠØ�$‰hŠØ �‰ ˆð ùs ‚4A ·A có.—eZdZd„Zd„ZeZd„Zd„Zd„Zy)Úrevnavcó&—|j|_y)zUNavigation generation object :repo: repo object we generate nav for N)Ú changelogÚ_revlog)ÚselfÚrepos r0Ú__init__zrevnav.__init__gs€ð —~‘~ˆ� r2có&—|j«duS)z,return True if any revision to navigate overN)Ú_first©rJs r0Ú __nonzero__zrevnav.__nonzero__os€à�{‰{‹} DÐ(Ð(r2có^— tt|j««S#t$rYywxYw)z1return the minimum non-filtered changeset or NoneN)ÚnextÚiterrIÚ StopIterationrOs r0rNz revnav._firstus-€ð Üœ˜TŸ\™\Ó*Ó+Ð +øÜò Ùð ús ‚   ,«,cóJ—t|jj|««S©N)rrIÚnode©rJÚrevs r0rz revnav.hex|s€Ü�4—<‘<×$Ñ$ SÓ)Ó*Ð*r2cóP—|s?tjtjg«tjg«dœg«Sg}td|«D]1}||kDrn*|j||z«|j||z «Œ3|j «|j «}d|z|j |«dœg}g}|D]’} | |jvrŒ|| cxkr|kr5nn2|jdt| |z «z|j | «dœ«d| cxkr|ksŒ^nŒa|jdt| |z «z|j | «dœ«Œ”|jdddœ«tjtj|«tj|«dœg«S) a©computes label and revision id for navigation link :pos: is the revision relative to which we generate navigation. :pagelen: the size of each navigation page :limit: how far shall we link The return is: - a single element mappinglist - containing a dictionary with a `before` and `after` key - values are dictionaries with `label` and `node` keys )sbeforesafterrs(%i))slabelr#s+%drs-%dótip) rr)rDr(ÚsortrNrrIÚabs) rJÚposÚpagelenÚlimitÚtargetsÚfÚfirstÚ navbeforeÚnavafterrYs r0Úgenz revnav.gens�€ñä×+Ñ+ô$0×#;Ñ#;¸BÓ#?Ü".×":Ñ":¸2Ó">ñðóð ðˆÜ˜˜GÖ$ˆAØ�5ŠyÙØ �N‰N˜3 ™7Ô #Ø �N‰N˜3 ™7Õ #ð %ð � ‰ Œà— ‘ “ ˆØ '¨%¡¸$¿(¹(À5»/ÑJÐKˆ ؈ۈCؘ$Ÿ,™,Ñ&ØØ�SÔ ˜5Õ Ø—‘Ø%¬¨C°#©I«Ñ6ÀÇÁÈ#ÃÑOôð�3Œ}˜Ž}Ø× Ñ Ø%¬¨C°#©I«Ñ6ÀÇÁÈ#ÃÑOõðð �‰ 6°FÑ;Ô<ô×'Ñ'ô ,×7Ñ7¸ ÓBÜ*×6Ñ6°xÓ@ñð ó ð r2N) Ú__name__Ú __module__Ú __qualname__rLrPÚ__bool__rNrrfrAr2r0rFrFfs"„ò&ò)ð€Hòò+ó8 r2rFcó—eZdZd„Zd„Zy)Ú filerevnavcón—|j«j|_|j|«|_y)z‰Navigation generation object :repo: repo object we generate nav for :path: path of the file we generate nav for N)Ú unfilteredrHÚ _changelogÚfilerI)rJrKr7s r0rLzfilerevnav.__init__»s'€ðŸ/™/Ó+×5Ñ5ˆŒà—y‘y “ˆ� r2có|—t|jj|jj |«««SrV)rrorWrIÚlinkrevrXs r0rzfilerevnav.hexÆs+€Ü�4—?‘?×'Ñ'¨¯ © ×(<Ñ(<¸SÓ(AÓBÓCÐCr2N)rgrhrirLrrAr2r0rlrlºs „ò 'óDr2rlc#ó.K—|D]Œ}|j«|j«|j«|j«|j «|j «dœ}t j|d«r|j«|d<|–—ŒŽy­w)N)r#órevsuseródates descriptionóbranchr7ófile) rrYÚuserÚdateÚ descriptionÚbranchrÚ safehasattrr7)r ÚctxsÚsÚds r0Ú_ctxsgenr€Ìssèø€Û ˆà—U‘U“WØ—E‘E“GØ—V‘V“XØ—V‘V“XØŸM™M›OØ—x‘x“zñ  ˆô × Ñ ˜A˜vÔ &ØŸ™›ˆAˆg‰JØ‹ñùs‚BBcó—|€g}|D�cgc]0}|j«|j«jk7sŒ/|‘Œ2}}t|«dk(r|dj «|k(rg}t j t|f¬«Scc}w)Nrr©Úargs)rWrKÚnullidÚlenrYrÚmappinggeneratorr€)ÚsiblingsÚhiderevr~s r0Ú _siblingsr‰Ûsv€ØÐ؈Ù#ÓC™8�a q§v¡v£x°1·6±6³8·?±?Ó'B’˜8€HÐCÜ ˆ8ƒ}˜Ò˜h q™kŸo™oÓ/°7Ò:ØˆÜ × (Ñ (¬¸¸ Ô DÐDùòDs ‰0BºBcóΗtj|d|d¬«}dD]F}|jj|«}|€Œ!t j |«}t |||�|nd«ŒH|S)NT)r!ÚsectionÚ whitespace)signorewssignorewsamounts ignorewseolsignoreblanklines)rÚdifffeatureoptsÚqsparamsÚgetrÚ parseboolr)Úreqrr‹ÚdiffoptsÚkÚvs r0r�r�äsk€Ü×'Ñ'Ø �d G¸ô€Hóˆð �L‰L× Ñ ˜QÓ ˆØ ‰=Ü×$Ñ$ QÓ'ˆAÜ �H˜a a m¡¸Õ >ðð €Or2cóB—t||d«}|jd|¬«S)NsannotateT)Úfollowr’)r�Úannotate)r‘Úfctxrr’s r0r—r—÷s#€Ü˜s B¨ Ó4€HØ �=‰= ¨xˆ=Ó 8Ð8r2có—t|tj«rO|j«}|j «j «|k7rt |j«|g|«St |j«|«SrV) Ú isinstancer Ú basefilectxÚintrorevÚ changectxrYr‰rKÚparents)ÚctxÚhiderœs r0ržržüsb€Ü�#”w×*Ñ*Ô+Ø—<‘<“>ˆØ �=‰=‹?× Ñ Ó  HÒ ,ܘcŸh™h›j¨Ñ2Ð3°TÓ:Ð :Ü �S—[‘[“] DÓ )Ð)r2có6—t|j«|«SrV)r‰Úchildren)rŸr s r0r¢r¢s€Ü �S—\‘\“^ TÓ *Ð*r2có —|j«}|r(tj|dt|d«dœg«Stjg«S)Nrr)rwr#)Úrenamedrr)r)r˜Úrs r0Ú renamelinkr¦sF€Ø � ‰ ‹€AÙÜ×'Ñ'°1°Q±4Ä#ÀaÈÁdÃ)Ñ)LÐ(MÓNÐNÜ × #Ñ # BÓ 'Ð'r2cóN—tj|j|«d¬«S©Nóname©Úname)rÚ hybridlistÚnodetags©rKrWs r0Ú nodetagsdictr¯s€Ü × "Ñ " 4§=¡=°Ó#6¸WÔ EÐEr2cóN—tj|j|«d¬«Sr¨)rr¬Ú nodebookmarksr®s r0Únodebookmarksdictr²s €Ü × "Ñ " 4×#5Ñ#5°dÓ#;À'Ô JÐJr2cóö—g}|j«} |j|«}||j «k(r|j |«t j|d¬«S#tj$rd}YŒRwxYwr¨©r{Ú branchtiprÚRepoLookupErrorrWr(rr¬©rKrŸÚbranchesr{Ú branchnodes r0Únodebranchdictrºsp€Ø€HØ �Z‰Z‹\€FðØ—^‘^ FÓ+ˆ ð�S—X‘X“ZÒØ�‰˜ÔÜ × "Ñ " 8°'Ô :Ð:øô × Ñ òØŠ ðús”A Á A8Á7A8có—g}|j«} |j|«}|dk7r$||j «k7r|j |«t j|d¬«S#tj$rd}YŒWwxYw©Nsdefaultr©rªr´r·s r0Ú nodeinbranchr½%sw€Ø€HØ �Z‰Z‹\€FðØ—^‘^ FÓ+ˆ ð�Ò  ¨c¯h©h«jÒ 8Ø�‰˜ÔÜ × "Ñ " 8°'Ô :Ð:øô × Ñ òØŠ ðús”A%Á%A=Á<A=có€—g}|j«}|dk7r|j|«tj|d¬«Sr¼)r{r(rr¬)rŸr¸r{s r0Únodebranchnodefaultr¿1s9€Ø€HØ �Z‰Z‹\€FØ �ÒØ�‰˜ÔÜ × "Ñ " 8°'Ô :Ð:r2c#ó2K—||«D]}||i–—Œ y­wrVrA)r rbrWr«Úts r0Ú _nodenamesgenrÂ9sèø€Ù ˆtŽWˆØ�Qˆi‹ñùs‚cót—|€ |j}|j|df}tjt||¬«S)Nstag©rƒr«)r„r­rr†r©rKÚt1rWrƒs r0ÚshowtagrÇ>s5€Ø €|Ø�{‰{ˆØ �M‰M˜4 Ð (€DÜ × (Ñ (¬¸TÈÔ KÐKr2cót—|€ |j}|j|df}tjt||¬«S)NsbookmarkrÄ)r„r±rr†rÂrÅs r0Ú showbookmarkrÉEs7€Ø €|Ø�{‰{ˆØ × Ñ   kÐ 2€DÜ × (Ñ (¬¸TÈÔ KÐKr2c󌇇‡‡‡‡—gЉj«Št|«Šd„Šˆˆˆˆˆˆfd„}tj|«S)Ncó4—|d |dj«fS)Nrr)rY)Úitems r0Úzbranchentries..Ps€  Q¡˜K¨¨a©¯©«Ñ7r2c3ó’•K—d}‰ s>‰ j«j«D]\}}}}‰ j‰ ||f«Œt‰ ‰ d¬«D]o\}}‰ dkDr|‰ k\ry|dz }|rd}n|j «‰vrd}nd}t ‰ «|j «||j«|j«dœ–—Œqy­w) NrT)ÚkeyÚreversersclosedsinactivesopen)óparityrvóstatusr#ru) Ú branchmapÚ iterbranchesr(ÚsortedrWrRr{rry)r ÚcountÚtagÚhsÚtipÚclosedrŸÚstatusÚheadsr`ÚparityrKÚsortkeyÚtipss €€€€€€r0Úentrieszbranchentries..entriesRsÈøèø€ØˆÙØ(,¯©Ó(8×(EÑ(EÖ(GÑ$��R˜˜fØ— ‘ ˜T #™Y¨Ð/Õ0ð)Hä! $¨G¸T×B‰KˆC�Ø�qŠy˜U eš^ÙØ �Q‰JˆEÙØ"‘Ø—‘“ 5Ñ(Ø$‘à �ä ›<ØŸ:™:›<Ø!ØŸ™›ØŸ™›ñ ó ñCùsƒCC)rÜr rr†)rKÚ stripecountr`ràrÜrÝrÞrßs` ` @@@@r0Ú branchentriesrâLs?ý€Ø €DØ �J‰J‹L€EÜ �{Ó #€FÙ7€G÷ñô. × (Ñ (¨Ó 1Ð1r2có¬—|jd«}tj|jd¬«}tj|jd||¬«S)Nr4F)Úrealfsr2)Úauditor)ÚlstriprÚ pathauditorÚrootÚ canonpath)rKr7rås r0Ú cleanpathrêlsA€Ø �;‰;�tÓ €DÜ×"Ñ" 4§9¡9°UÔ;€GÜ × Ñ ˜dŸi™i¨¨d¸GÔ DÐDr2có¨—d}d|jvr-|jd}|jd«}|dk7r||dzd}tj||«S)Nr[r#ó:r5r©rŽÚfindrÚ revsymbol©rKr‘ÚchangeidÚiposs r0r�r�rsY€Ø€HØ�#—,‘,ÑØ—<‘< Ñ(ˆØ�}‰}˜TÓ"ˆØ �2Š:Ø ¨¡  Ð-ˆHä × Ñ ˜T 8Ó ,Ð,r2có —d|jvr@|jd}|jd«}|dk7r|d|}tj||«Sy)Nr#rìr5rírðs r0Ú basechangectxrô}sR€Ø�#—,‘,ÑØ—<‘< Ñ(ˆØ�}‰}˜TÓ"ˆØ �2Š:Ø  �ˆHÜ×$Ñ$ T¨8Ó4Ð 4à r2cóš—d|jvrttd«‚t||jd«}d|jvr|jd}n.d|jvr|jd}nttd«‚ t j ||«|}|S#t j$r|j||¬«}Y|SwxYw)Nrwsfile not givenr#sfilenodesnode or filenode not given)Úfileid) rŽr r rêrrïrÚ RepoErrorÚfilectx)rKr‘r7rñr˜s r0rørøˆs€Ø�c—l‘lÑ"ÜœNÐ,=Ó>Ð>Ü �T˜3Ÿ<™<¨Ñ0Ó 1€DØ�#—,‘,ÑØ—<‘< Ñ(‰Ø ˜Ÿ ™ Ñ $Ø—<‘<  Ñ,‰äœNÐ,IÓJÐJð3Ü× Ñ   xÓ0°Ñ6ˆð €Køô �?‰?ò3Ø�|‰|˜D¨ˆ|Ó2‰à €Kð3úsÂB  &C à C có¬—|jjd«}|syt|«dkDrttd«‚ t t |djdd««\}} tj||«S#t$rttd«‚wxYw#tj$r(}tttj|««‚d}~wwxYw)Ns linerangersredundant linerange parameterrrìsinvalid linerange parameter)rŽÚgetallr…r r ÚmapÚintÚsplitÚ ValueErrorrÚprocesslinerangerÚ ParseErrorrÚbytestr)r‘Ú linerangeÚfromlineÚtolineÚexcs r0rršs̀ؗ ‘ ×#Ñ# LÓ1€IÙ ØÜ ˆ9ƒ~˜ÒÜÔ,Ð.NÓOÐOðNÜœs I¨a¡L×$6Ñ$6°t¸QÓ$?Ó@ш�&ðEÜ×$Ñ$ X¨vÓ6Ð6øô òNÜÔ,Ð.LÓMÐMðNûô × Ñ òEÜÔ,¬h×.>Ñ.>¸sÓ.CÓDÐDûðEús#¾&A;Á%BÁ;BÂCÂ+#CÃCcó—d|dz|fzS)Ns%d:%drrA)rrs r0Úformatlinerangerªs€Ø �x !‘| VÐ,Ñ ,Ð,r2c#óʇK—|j|d«Štj||«}|j||«D] }t ˆfd„|dD««|d<|–—Œ"y­w)Nórepoc3ó(•K—|] }‰|–—Œ y­wrVrA)Ú.0Ú successorrKs €r0Ú z&_succsandmarkersgen..²søèø€ð( Ù-@  ˆD��OÑ-@ùsƒs successors)ÚresourcerÚshowsuccsandmarkersÚtovaluer‰)r ÚmappingÚ itemmappingsrÌrKs @r0Ú_succsandmarkersgenr®sløèø€Ø ˆ7× Ñ ˜G WÓ -€DÜ×1Ñ1°'¸7ÓC€LØ×$Ñ$ W¨gÖ6ˆÜ'ó( Ø-1°-Ò-@ó( ó ˆˆ]Ñð‹ ñ 7ùsƒA A#có:—tjt|f¬«S©Nr‚)rr†r©r rs r0Úsuccsandmarkersr¸s€Ü × (Ñ (Ô)<ÀGÀ:Ô NÐNr2r óctxc#óÞK—|j|d«}|j|d«}tj||«}|D](}|jd«rt |d«|d<|–—Œ*y­w)Nr rsdivergentnodes)rrÚ whyunstabler�r‰)r rrKrŸràÚentrys r0Ú_whyunstablegenrÀsrèø€Ø ˆ7× Ñ ˜G WÓ -€DØ ˆ'× Ñ ˜7 FÓ +€Cä×!Ñ! $¨Ó,€GÛˆØ �9‰9Ð&Ô 'Ü'0°Ð7HÑ1IÓ'JˆEÐ#Ñ $Ø‹ ñùs‚A+A-có:—tjt|f¬«Sr)rr†rrs r0rrËs€Ü × (Ñ (¬À¸zÔ JÐJr2có<‡—tj‰«}id‰“d‰j«“dt|«“d‰j «“d‰j «“d‰j «“d‰j«“d‰j«“d ‰j«“d t“d tj‰j«d ¬ «“dt“dt‰«“dt!|‰«“dt#|‰«“dt%||«“dt'||«“ˆfd„ˆfd„dœ¥S)Nrrtr#sauthorsdescrusextrasphasesobsoletessuccsandmarkerss instabilitiess instabilityrªs whyunstablervsinbranchsbranchesstagss bookmarkscó•—t‰«SrV©rž©r rrŸs €r0rÍzcommonentry..ës ø€¬G°C¬Lr2có•—t‰«SrV©r¢r!s €r0rÍzcommonentry..ìs ø€¬8°C¬=r2)óparentóchild)rÚbinnoderYrrxrzryÚextraÚphasestrÚobsoleterrr¬Ú instabilitiesrr¿r½rºr¯r²)rKrŸrWs ` r0Ú commonentryr+Òs_ø€Ü �?‰?˜3Ó €Dð ð �ð  ð �—‘“ ð  ð ”�T“ð  ð �3—8‘8“:ð ð �—‘Ó"ð ð �—‘“ð ð �#—)‘)“+ð ð �#—,‘,“.ð ð �S—\‘\“^ð ð œOð ð œ,×1Ñ1Ø × Ñ Ó  nô ð ð" œ ð# ð$ Ô& sÓ+ð% ð& ”\ $¨Ó,ð' ð( ”^ D¨#Ó.ð) ð* ”˜d DÓ)ð+ ð, Ô'¨¨dÓ3ð- ó.9Û8ò1 ðr2có,‡‡—|j}‰j«Štj‰«}t |d|«}t ‰j «||j«}t|‰«}|jˆfd„ˆˆfd„ˆˆfd„||dœ«|S)zÁObtain a dictionary to be used for entries in a changelist. This function is called when producing items for the "entries" list passed to the "shortlog" and "changelog" templates. ó changelogtagcó•—t‰«SrVr r!s €r0rÍz!changelistentry..ÿs ø€´G¸C´Lr2có"•—t‰‰dz «S©Nrr ©r rrŸrYs €€r0rÍz!changelistentry..sø€´¸¸SÀ1¹WÔ0Er2có"•—t‰‰dz«Sr0r#r1s €€r0rÍz!changelistentry..sø€¬x¸¸SÀ1¹WÔ/Er2)s allparentsr$r%r-sfiles) rKrYrr&rÇÚ listfilediffsÚfilesÚmaxfilesr+Úupdate)ÚwebrŸrKÚnÚshowtagsr4rrYs ` @r0Úchangelistentryr:ðs€ù€ð �8‰8€DØ �'‰'‹)€CÜ�‰˜Ó€AÜ�t˜_¨aÓ0€HÜ ˜#Ÿ)™)›+ q¨#¯,©,Ó 7€Eä ˜˜cÓ "€EØ ‡L�Lã@ÜEÜEØ%Øñ  ôð €Lr2c#ó�K—|j}d}|D]/}||k\ry|dz }t|||«}t|«|d<|–—Œ1y­w)z2Emit up to N records for an iterable of revisions.rrrÑN)rKr:rR)r7ÚrevsÚmaxcountÚparityfnrKrÖrYrs r0Úchangelistentriesr? sUèø€à �8‰8€Dà €EÛˆØ �HÒ Ù à �‰ ˆä  T¨#¡YÓ/ˆÜ ›>ˆˆiÑà‹ ñùs‚AAcóž—d|jvr"tj|jd«Stt j |««S)Nr#)rŽrÚ revescaperrr&)r‘rŸs r0ÚsymrevorshortnoderBs<€Ø�#—,‘,ÑÜ×(Ñ(¨¯©°gÑ)>Ó?Ð?ä”W—_‘_ SÓ)Ó*Ð*r2c #ó K—t|«}|j«}t|j««D]S\}}||vrd}n ||vrd}nd}|dk(rdnd}|j||j «||dzt |«|dœ«–—ŒUy­w)Nsremovedsaddedsmodifieds filenolinks filenodelinkr)r#rwóblocknorÑrÒ)r Ú filesaddedÚ enumerater4ÚprocessrrR) r rŸrárÝrEÚblocknorbrÛÚtemplates r0Ú _listfilesgenrJ!s˜èø€Ü �{Ó #€FØ—‘Ó!€JÜ § ¡ £ Ö,‰ ˆ�Ø �C‰<؉FØ �*‰_؉Fà ˆFØ$*¨jÒ$8‘=¸oˆØˆg�o‰oØ àŸ™›ØØ# a™KÜ ›<Ø!ñ  ó  ó ñ-ùs‚B Bcó˜‡ —t|jdtj|««}t |jdtj|««}t |«}t |j|j«}|€|j«}|jdd«}d|jjvr|jjd}t|||d|«}t|j«}t|jj||«Š t!|‰ |«} t#d |t%|j|«|j'«|||t)j*t,||jf¬«ˆ fd„| |j/|j'««dœ t1j2t5|j|««¤ŽS) zBObtain a dictionary to be used to render the "changeset" template.s changesettagschangesetbookmarkNrsstyler‚có•—t‰«SrV)Ú diffsummary)r rÚ diffstatsgens €r0rÍz changesetentry..Ys ø€¬[¸Ô-Fr2) ÚdiffÚsymrevÚbasenodeÚ changesettagÚchangesetbookmarkÚchangesetbranchr4rMÚdiffstatr-rA)rÇrKrr&rÉr¿rôr‘Úp1ÚconfigrŽÚdiffsr ráÚ diffstatgenrrUÚdictrBrrÚmappedgeneratorrJr1rÚ strkwargsr+) r7rŸr9Ú showbookmarksÚ showbranchÚbasectxÚstylerOrÝÚ diffstatsrNs @r0Úchangesetentryrb8suø€ô�s—x‘x ´'·/±/À#Ó2FÓG€HÜ Ø �‰Ð&¬¯©¸Ó(<ó€Mô% SÓ)€Jä˜CŸH™H c§g¡gÓ.€G؀ؗ&‘&“(ˆà �J‰J�v˜xÓ (€EØ�3—7‘7×#Ñ#Ñ#Ø—‘× Ñ  Ñ*ˆä ��c˜7 D¨%Ó 0€Dä �s—‘Ó '€FܘsŸx™xŸ{™{¨C°Ó9€Lܘ˜l¨FÓ3€Iä ð Ø Ü  §¡¨#Ó.Ø—‘“ØØ'Ø"Ü×*Ñ*Ü   c§o¡oÐ 6ô óGØØ—‘ §¡£Ó+ñ ô × Ñ œ[¨¯©°3Ó7Ó 8ñ ðr2c#óªK—|d|D]#}|jdt|«|dœ«–—Œ%t|«|kDr|jdi«–—yy­w)Ns filedifflink)r#rws fileellipses)rGrr…)r r4rWÚmaxrbs r0Ú_listfilediffsgenre`sVèø€Ø �4�C‹[ˆØˆg�o‰o˜o¼¸T»ÈQÑ/OÓPÓPðä ˆ5ƒz�CÒØˆg�o‰o˜o¨rÓ2Ó2ðùs‚AAcó>—tjt|||f¬«Sr)rr[re)r4rWrds r0r3r3gs!€Ü × 'Ñ 'Ü ¨¨cÐ 2ô ðr2c #óK—t|d«D]m\}}d||fz}|jd«rd}n*|jd«rd}n|jd«rd}nd }|j||||d |zzd |zd œ«–—Œoy­w) Nrs%d.%dó+s difflineplusó-s difflineminusó@s difflineatsdifflinesl%ss% 8s)slineslinenoólineids linenumber)rFÚ startswithrG)r ÚlinesrHÚ lineidprefixÚlinenoÚlÚ difflinenoÚltypes r0Ú_prettyprintdifflinesrsms˜èø€Ü˜u aÖ(‰ ˆ�Ø ¨&Ð 1Ñ1ˆ Ø �<‰<˜Ô Ø#‰EØ �\‰\˜$Ô Ø$‰EØ �\‰\˜$Ô Ø!‰EàˆE؈g�o‰oØ àØ!Ø'¨&°:Ñ*=Ñ=Ø&¨Ñ3ñ  ó ó ñ)ùs‚A>Bc #óFK—|rtj|«} ntj«} tj|j d¬«} t |«} tj|||| | ¬«} t| d«D]—\} \}}}}|dk7r|dd}|D�cgc]}|dz‘Œ }}|D]:\}}|�"|� |\}}}}tj||f|«sŒ*|j|«Œ<|sŒitjt|| |f¬«}t| «| |dœ–—Œ™ycc}w­w) NTr ©Úoptsrsrawó r‚)rÑrDólines)rÚexactÚalwaysrr’rr Ú diffhunksrFrÚ hunkinrangeÚextendrr[rsrR)r rKrŸr_r4r`rárrnÚmr’rÝr{rHÚfctx1Úfctx2ÚheaderÚhunksÚhrmÚ hunkrangeÚ hunklinesÚs1Úl1Ús2Úl2rps r0Ú _diffsgenrŠƒs+èø€ñ Ü �K‰K˜Ó ‰ä �L‰L‹Nˆä�~‰~˜dŸg™g°Ô6€HÜ �{Ó #€Fä—‘  g¨s°A¸HÔE€IÜ2;¸IÀqÖ2IÑ.ˆÑ.�%˜ ¨Ø �FŠ?ؘA˜B�ZˆFÙ$*Ó+¡F˜q��U“ FˆÐ+Û$)Ñ ˆI�yØÐ$¨Ð)>Ø!*‘��B˜˜BÜ×(Ñ(¨"¨b¨°9Ô=ØØ �L‰L˜Õ #ð %*ò Ü×,Ñ,Ü%¨U°G¸\Ð,JôˆAô  ›<Ø#Øñó ñ3Jùò,ùs‚BD! DÂ&AD!Ã*7D!cóv—|j|||||j||f}tjt|d¬«S)Ns diffblockrÄ)rKrárr†rŠ)r7rŸr_r4r`rrnrƒs r0rXrX¬sE€à �‰Ø ØØ Ø Ø �‰ØØð €Dô × (Ñ (ܘ <ô ðr2c ó’—|xrd|zxsd}||xrd|zxsdz }|rd|znd}|rd|znd}|||d|z|xsd|d|z|xsddœS)Nsl%dr2sr%ds%ds% 6s)r"rks leftlinenosleftlinenumbersleftlines rightlinenosrightlinenumbers rightlinerA)ÚtypeÚ leftlinenoÚleftlineÚ rightlinenoÚ rightlineÚlineidÚllnoÚrlnos r0Ú _compliner•¼s~€Ø Ò 1˜V jÑ0Ò 8°S€FØ ˆkÒ4˜v¨ Ñ3Ò;¸Ñ;€FÙ!+ˆ5�:Ò °€DÙ"-ˆ5�;Ò °3€DàØØ!Ø" T™>Ø’_ Ø#Ø# d™NØÒ& 3ñ ð r2c #ó¸K—|D]Ñ\}}}}}tj|«}||z } ||z } t| | «} t| «D],} t ||| zdz||| z|| zdz||| z¬«–—Œ.| | kDr-t|| z|«D]} t || dz|| dd¬«–—ŒŒ | | kDsŒ¦t|| z|«D]} t |dd| dz|| ¬«–—ŒŒÓy­w)Nr)r�rŽr�r�r‘)rÚsysbytesÚminÚranger•) r Ú leftlinesÚ rightlinesÚopcodesr�ÚlloÚlhiÚrloÚrhiÚlen1Úlen2rÖÚis r0Ú_getcompblockgenr¤Ísèø€Û$+Ñ ˆˆc�3˜˜SÜ× Ñ  Ó&ˆØ�S‰yˆØ�S‰yˆÜ�D˜$“ˆÜ�u–ˆAÜØØ ™7 Q™;Ø" 3¨¡7Ñ+Ø !™G a™KØ$ S¨1¡WÑ-ô ó ðð �$Š;ܘ3 ™;¨Ö,�ÜØØ  1™uØ& q™\Ø $Ø"ô óñ-ð�D‹[ܘ3 ™;¨Ö,�ÜØØ#Ø!Ø ! A¡Ø(¨™mô óñ-ñ/%,ùs ‚B(CÂ+/CcóD—|||f}tjt|d¬«S)NscomparisonlinerÄ)rr†r¤)ršr›rœrƒs r0Ú _getcompblockr¦ïs)€Ø �z 7Ð +€DÜ × (Ñ (ܘtÐ*;ô ðr2c#óÜK—tjd||«}|dkr"t|||j««}d|i–—y|j |¬«D]}t|||«}d|i–—Œy­w)z>Generator function that provides side-by-side comparison data.Nrrx)r8)ÚdifflibÚSequenceMatcherr¦Ú get_opcodesÚget_grouped_opcodes)r Ú contextnumršr›r~rpÚocs r0Ú _comparegenr®ösoèø€ä×Ñ  i°Ó<€AØ�A‚~Ü ˜) Z°·±³Ó AˆØ˜ˆmÓà×'Ñ'¨*Ð'Ö5ˆBܘi¨°RÓ8ˆAؘQ�-Ó ñ6ùs‚A*A,cóD—|||f}tjt|d¬«S)NscomparisonblockrÄ)rr†r®)r¬ršr›rƒs r0Úcomparer°s)€Ø ˜  :Ð .€DÜ × (Ñ (ܘ$Ð%7ô ðr2c#óúK—tj|ddi«}tjtj|j ||¬«««}tj |«\}}}}} |||||| f–—Œ ­w)z3Generator function that provides the diffstat data.snoprefixFru)rr’Ú diffstatdatarÚ iterlinesrOÚ diffstatsum) rrŸr_r’ÚstatsÚmaxnameÚmaxtotalÚaddtotalÚ removetotalÚbinarys r0rYrY syèø€ô�~‰~˜b ;°Ð"6Ó7€HÜ × Ñ œtŸ~™~¨c¯h©h°wÀX¨hÓ.NÓOÓ P€EÜ7<×7HÑ7HÈÓ7OÑ4€GˆX�x ¨fØ Ø�W˜h¨°+¸vÐEÒEð ùs‚A9A;cóZ—t|«\}}}}}}td«t|«||fzS)z#Return a short summary of the diff.s5 %d files changed, %d insertions(+), %d deletions(-) )rRrr…)Ústatgenrµr¶r·r¸r¹rºs r0rMrMsA€ô?CÀ7»mÑ;€Eˆ7�H˜h¨ °VÜ Ð FÓ GÜ ˆE‹ ØØðKñ ðr2c #ó‡K—t|«\}}Š}}}|j«} ˆfd„} d} |D]Y\} } }}| | vrdnd}| |z}| dz } |j||j«| | || | «| |«t|«dœ«–—Œ[y­w)Ncó2•—‰dk(ryt|«‰z dzS)Nréd)Úfloat)r£r·s €r0Úpctz_diffstattmplgen..pct"s!ø€Ø �qŠ=ØÜ�a“˜8Ñ# sÑ*Ð*r2rs diffstatlinksdiffstatnolinkr)r#rwsfilenostotalsaddpcts removepctrÑ)rRr4rGr)r rŸr¼rÝrµr¶r¸r¹rºr4rÁÚfilenoÚfilenameÚaddsÚremovesÚisbinaryrIÚtotalr·s @r0Ú_diffstattmplgenrÈsªøèø€Ü>BÀ7»mÑ;€Eˆ7�H˜h¨ °VØ �I‰I‹K€Eô+ð €FÛ-2Ñ)ˆ�$˜ Ø&.°%Ñ&7‘?Ð=NˆØ�w‘ˆØ�!‰ ˆØˆg�o‰oØ àŸ™›Ø!Ø!ØÙ˜t›9Ù! '›lÜ ›<ñ ó  ó ñ .3ùsƒB B cóB—|||f}tjt|¬«S)z5Return a diffstat template for each file in the diff.r‚)rr[rÈ)rŸr¼rÝrƒs r0rUrU:s"€à �˜&Ð !€DÜ × 'Ñ 'Ô(8¸tÔ DÐDr2cób—eZdZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zy)Ú sessionvarscó —||_||_yrV)Ú_startÚ_vars)rJÚvarsÚstarts r0rLzsessionvars.__init__As€ØˆŒ ؈� r2có —|j|SrV©rÎ)rJrÏs r0Ú __getitem__zsessionvars.__getitem__Es€Ø�z‰z˜#‰Ðr2có"—||j|<yrVrÒ)rJrÏÚvalues r0Ú __setitem__zsessionvars.__setitem__Hs€Øˆ� ‰ �3Šr2cóh—ttj|j«|j«SrV)rËÚcopyrÎrÍrOs r0Ú__copy__zsessionvars.__copy__Ks €Üœ4Ÿ9™9 T§Z¡ZÓ0°$·+±+Ó>Ð>r2cóL—tj|||«}||jvSrV)rÚ unwrapvaluerÎ)rJr rrÌs r0Úcontainszsessionvars.containsNs%€Ü×'Ñ'¨°¸$Ó?ˆØ�t—z‘zÐ!Ð!r2cóf—tj|||«}|jj|«SrV)rrÛrÎr�)rJr rrÏs r0Ú getmemberzsessionvars.getmemberRs)€Ü×&Ñ& w°¸Ó=ˆØ�z‰z�~‰~˜cÓ"Ð"r2có>—tjtd««‚©Nsnot comparable©rrr©rJr rs r0Úgetminzsessionvars.getminVó€Ü×ÑœqÐ!2Ó3Ó4Ð4r2có>—tjtd««‚ràrárâs r0Úgetmaxzsessionvars.getmaxYrär2có>—tjtd««‚)Nsnot filterablerá)rJr rÚselects r0Úfilterzsessionvars.filter\s€ä×ÑœqÐ!2Ó3Ó4Ð4r2c#ó´K—|j}t|jj««D]"\}}|t j |«|dœ–—d}Œ$y­w)N)r©svalues separatoró&)rÍrÕrÎr&rr)rJr Ú separatorrÏrÕs r0Úitermapszsessionvars.itermaps`sTèø€Ø—K‘Kˆ Ü  §¡×!1Ñ!1Ó!3Ö4‰JˆC�àÜ"×*Ñ*¨5Ó1Ø'ñò ð ‰Iñ 5ùs‚AAcó>—tjtd««‚)Ns not displayable without templaterá)rJr rÚseps r0Újoinzsessionvars.joinjs€ä×ÑœqÐ!DÓEÓFÐFr2có(—|j||d«S©Nr2)rðrâs r0Úshowzsessionvars.showns€Ø�y‰y˜ '¨3Ó/Ð/r2có,—t|j«SrV)ÚboolrÎrâs r0Útoboolzsessionvars.toboolqs€Ü�D—J‘JÓÐr2có—|jSrVrÒrâs r0rzsessionvars.tovaluets €Ø�z‰zÐr2N)ó?)rgrhrirLrÓrÖrÙrÜrÞrãrærérírðrórörrAr2r0rËrË@sI„óòò ò?ò"ò#ò5ò5ò5òòGò0ò ór2rËcó—eZdZd„Zy)Úwsgiuicó—y)NéPrArOs r0Ú termwidthzwsgiui.termwidthzs€Ør2N)rgrhrirýrAr2r0rúrúxs„ór2rúcó’—g}|jjd«}||jjd«z }|D�]B\}}|dd}tj|«}t j d|||fz|«}|s*|jj td«||fz«Œit jd|z«}|j||jd««} |j||jd««} |jd«} d } | r>tj| j««D]} | tj| z} Œ t j| | «} |j| | f«�ŒE|S#tj $r-|jj td «|| fz«Y�Œ‡wxYw) Nswebsubsinterhgrrs1^s%s(.+)(?:(?<=\\\\)|(?r!sÄðó ÛÛ Û åßÝ÷ó÷÷÷÷ñõ$àˆt�}‰}ðó€ ó.ò(ó ÷ Q ñQ ôh D�ô Dò$ óEòò&9ó *ó+ò(òFòKò ;ò ;ò;òó LóLó2ò@Eò -òòò$ Eò -òòOð % fÐ-€ÔòòKð! &Ð)€ Ôòò<ò2ò"+ò ò.%òP3òò  ò,&óR ò ò"òDò  òòFòò ò8Eô 5�,×&Ñ&ô5ôpˆU�X‰Xôò +ó\+r2