Ë ÑNy¢�¥ã óª—ddlZddlmZddlmZddlmZddlmZm Z mZm Z m Z ddl m Z idd “d d “d d “dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d"“d#d$“d%d$“d$d&d'd(d(d)d*d(d+œ¥Zhd,£ZiZd-d.hZeej&d/««Zeej&ej*ej,«ej*ej.«zd0z««eeej2ed1d2«««zZeeej&d3««zZd]d4„Ze«Zd5„Z d6„Z!efd7„Z"d8„Z#d9„Z$d:„Z%eefd;„Z&d<„Z'd=„Z(iZ)d>„Z*d?„Z+d@„Z,dA„Z-dB„Z.dC„Z/dD„Z0dE„Z1dF„Z2edGhzZ3d^dH„Z4GdI„dJe jj«Z6d_dK„Z7dL„Z8d_dM„Z9dN„Z:dO„Z;dP„ZedSœZ?dT„Z@dU„ZAdV„ZBdW„ZCdX„ZDdY„ZEe jŒj�dZ«ZHd[„ZId\„ZJy)`éNé)Ú_)Úgetattr©Úhex)ÚerrorÚparserÚpycompatÚsmartsetÚutil)Ú stringutiló()éN)ógroupró))ófuncrrNó[)rNN)ó subscriptró]Nó#)rNN)órelationrNó##)éNN)ó_concatrNó~)éNN)óancestorrNó^)rNN)óparentró parentpostó-)éN)ónegateé)óminusr"Nó::)éó dagrangeall)ó dagrangeprer')ódagranger'ó dagrangepostó..ó:)éórangeall)órangeprer.)óranger.ó rangepostónot)é N)r3r4NNó!óand)r"NN)r6r"Nó&ó%)r"NN)óonlyr"óonlypostóor)éNN)r;r<Nó|)éNN)ókeyvaluer>N)éNN)ólistr@N)rNNNN)rósymbolNNN)róstringNNN)ó+ó=ó,rrrBrCóend>r;r6r3ó"ó's()[]#:=,-|&+!~^%s._@é€és-/c#óê‡K—t|t«stjd|z«‚t j |«}|€t }|€t}|r}‰r{|jdd«}tˆfd„|D««rU|dr d|ddf–—t|«dkDr't|d«}dd|f–—|dr d|d|dzf–—ddt|«f–—ydt|«}}||k�r||}|j«r�nå|dk(r|||d zd k(rd d|f–—|dz }�nÇ|d k(r|||d zd k(rd d|f–—|dz }�n©|d k(r|||d zdk(rdd|f–—|dz }�n‹|tvr |d|f–—�nz|tvs|dk(rŠ|||d zdvr€|dk(r|dz }||}d„} ntj} |dz }|}||kr2||} | dk(r|d z }Œ| |k(rd| |||«|f–—�n |dz }||krŒ2tj t#d«|«‚||vr½|}|dz }||kr+||} | |vrn!| d k(r||dz d k(r|dz}n |dz }||krŒ+|||} | t$vr| d|f–—nkd| vr`‰r‰| «rd| |f–—nU| jd«}|ddD]%} | rd| |f–—|t| «z }dd|f–—|dz }Œ'|drd|d|f–—nd| |f–—|dz}n"tj t#d«|z|«‚|dz }||kr�Œdd|f–—y­w)a³ Parse a revset statement into a stream of tokens ``syminitletters`` is the set of valid characters for the initial letter of symbols. By default, character ``c`` is recognized as valid for initial letter of symbols, if ``c.isalnum() or c in '._@' or ord(c) > 127``. ``symletters`` is the set of valid characters for non-initial letters of symbols. By default, character ``c`` is recognized as valid for non-initial letters of symbols, if ``c.isalnum() or c in '-._/@' or ord(c) > 127``. Check that @ is a valid unquoted token character (issue3686): >>> list(tokenize(b"@::")) [('symbol', '@', 0), ('::', None, 1), ('end', None, 3)] s&revset statement must be bytes, got %rNr-rc3ó4•K—|]}|sŒ‰|«–—Œy­w©N©)Ú.0ÚsymÚlookups €ú8usr/lib/python3.12/site-packages/mercurial/revsetlang.pyÚ ztokenize..wsøèø€Ð3¡e˜sªs‰v�c�{¡eùsƒ‹ rrBrGr@r&ó.r,rrór)sr'sr"có—|SrNrO©Úxs rSÚztokenize.. s€¡1óó\rCsunterminated stringr!éÿÿÿÿssyntax error in revset '%s')Ú isinstanceÚbytesrÚProgrammingErrorr ÚbytestrÚ_syminitlettersÚ _symlettersÚsplitÚallÚlenÚisspaceÚ_simpleoplettersÚ _quotelettersr Ú unescapestrÚ ParseErrorrÚkeywords) ÚprogramrRÚsyminitlettersÚ symlettersÚpartsÚsÚposÚlÚcÚdecodeÚdrQÚps ` rSÚtokenizerxTséøèø€ô* �gœuÔ %Ü×$Ñ$Ø 5¸Ñ ?ó ð ô×јwÓ'€GØÐÜ(ˆØÐÜ ˆ á‘6ð— ‘ ˜d AÓ&ˆÜ Ó3¡eÓ3Ô 3Ø�QŠxØ  %¨¡(¨AÐ.Ò.Ü�5‹z˜AŠ~ܘ˜a™“M�ؘT 1�oÒ%ؘ’8Ø$ e¨A¡h°°A±Ð6Ò6ؘ4¤ W£Ð.Ò .Ø à ”�G“ ˆ€CØ �‹'Ø �C‰LˆØ �9‰9Œ;Ù à �ŠI˜' #¨¨a©Ð0°EÒ9à˜$ Ð$Ò $Ø �1‰HŠCà �ŠI˜' #¨¨a©Ð0°EÒ9à˜$ Ð$Ò $Ø �1‰HŠCà �ŠI˜' #¨¨a©Ð0°EÒ9à˜$ Ð$Ò $Ø �1‰HŠCØ Ô"Ñ "Ø�d˜C�.Ô à ”Ñ Ø�DŠyؘ˜c A™gÐ&¨.Ñ8à�DŠyØ�q‘�ؘC‘L�Ù$‘ä×+Ñ+�Ø �1‰HˆC؈Aؘ’'ؘC‘L�ؘ’:ؘ1‘H�CØØ˜’6Ø$¡f¨W°Q°s¨^Ó&<¸aÐ@Ò@ÙØ�q‘�ð˜“'ô×&Ñ&¤qÐ)?Ó'@À!ÓDÐDà �.Ñ ØˆAØ �1‰HˆCؘ’'ؘC‘L�ؘJÑ&Øà˜’I '¨#°©'Ñ"2°dÒ":à˜1‘H�CØØ�q‘�ð˜“'ð˜!˜C�.ˆCØ”h‰Ø˜D !�nÓ$ؘ‘á™f Sœkà$ c¨1Ð-Ó-ð ŸI™I d›O�EØ" 3 B›Z˜ÙØ#,¨a°Ð"3Ò3ØœS ›V™ ˜Ø# T¨1˜oÒ-ؘQ™™ð (ð ˜R’yØ(¨%°©)°QÐ7Ó7à  # qÐ)Ò)Ø �1‰H‰Cä×"Ñ"ÜÐ0Ó1°GÑ;¸Sóð ð ˆq‰ˆðk �Œ'ðl �4˜Ð ÓùsƒGK3ÇAK3È7B2K3Ë+K3có\—|r |ddk(r|dStjtd««‚)NrrBrs not a symbol)rrkrrXs rSÚ getsymbolrzás/€ÙˆQˆq‰T�YÒ Ø�‰tˆ Ü × Ñ œ1˜_Ó-Ó .Ð.r[cóZ—|r|ddk(s|ddk(r|dStj|«‚)NrrCrBr©rrk)rYÚerrs rSÚ getstringr~çs5€Ùˆa�‰d�iÒ 1 Q¡4¨9Ò#4Ø�‰tˆ Ü × Ñ ˜3Ó Ðr[cóŠ—|s |tur|S tt||««S#t$rt j |«‚wxYwrN)Ú_notsetÚintr~Ú ValueErrorrrk)rYr}Údefaults rSÚ getintegerr„ísH€Ù �¤Ñ'؈ð$Ü”9˜Q Ó$Ó%Ð%øÜ ò$Ü×јsÓ#Ð#ð$ús Ž#£Acóp—tjt|««}|�|Stj|«‚rN)r Ú parseboolrzrrk)rYr}Úvalues rSÚ getbooleanrˆös2€Ü × Ñ ¤¨1£Ó .€EØ ÐØˆ Ü × Ñ ˜3Ó Ðr[có<—|sgS|ddk(rt|dd«S|gS)NrrAr)ÚlistrXs rSÚgetlistr‹ýs,€Ù ؈ ؈�tˆw‚Ü�A�a�b�E‹{ÐØ ˆ3€Jr[có¾—|stj|«‚|d}|dk(r |d|dfS|dk(rd|dfS|dk(r|ddfS|dk(rytj|«‚) Nrr1rr@r0r2r/©NNr|)rYr}Úops rSÚgetranger�s€€Ù Ü×јsÓ#Ð#Ø ˆ1‰€BØ ˆX‚~Ø�‰t�Q�q‘TˆzÐØ ˆ{Ò Ø�Q�q‘TˆzÐØ ˆ|Ò Ø�‰t�TˆzÐØ ˆ{Ò ØÜ × Ñ ˜3Ó Ðr[có˜—|r |ddk(s|ddk(rt||«}||fSt||«\}}t|||«t|||«fS)z¥Get [first, last] integer range (both inclusive) from a parsed tree If any of the sides omitted, and if no default provided, ParseError will be raised. rrCrB)r„r�)rYÚerr1Úerr2ÚdeffirstÚdeflastÚnÚaÚbs rSÚ getintranger˜s_€ñ  ˆa�‰d�iÒ 1 Q¡4¨9Ò#4Ü �q˜$Ó ˆØ�!ˆtˆ Ü �A�tÓ �D€A€qÜ �a˜˜xÓ (¬*°Q¸¸gÓ*FÐ FÐFr[cóˆ—t|«}t|«|ks|dk\r#t|«|kDrtj|«‚|S)Nr)r‹rfrrk)rYÚminÚmaxr}rss rSÚgetargsrœ!s<€Ü�‹ €AÜ ˆ1ƒv�‚|˜˜qš¤S¨£V¨c¢\Ü×јsÓ#Ð#Ø €Hr[cón—tjt|«|tj|«dd¬«S)Nr?rB)Ú keyvaluenodeÚkeynode)r Ú buildargsdictr‹Ú splitargspec)rYÚfuncnameÚkeyss rSÚ getargsdictr¤(s3€Ü × Ñ Ü�‹ ØÜ×јDÓ!Ø Øô  ðr[có\—tj|«}|€t|«xt|<}|SrN)Ú _treecacheÚgetÚparse)ÚspecÚtrees rSÚ _cachedtreer«6s-€ä �>‰>˜$Ó €DØ €|Ü"'¨£+Ð-Œ �4ј4Ø €Kr[cóF—t|«}tj|dg|¢­ŽS)zÊCreate raw parsed tree from a template revset statement >>> _build(b'f(_) and _', (b'string', b'1'), (b'symbol', b'2')) ('and', ('func', ('symbol', 'f'), ('string', '1')), ('symbol', '2')) ©rBó_)r«r Ú buildtree)ÚtmplspecÚreplsÚtemplates rSÚ_buildr³>s'€ô ˜8Ó$€HÜ × Ñ ˜HÐ&7Ð @¸%Ò @Ð@r[cóL—t|«}tj||dddh«S)aTest if a tree matches the given pattern statement; return the matches >>> _match(b'f(_)', parse(b'f()')) >>> _match(b'f(_)', parse(b'f(1)')) [('func', ('symbol', 'f'), ('symbol', '1')), ('symbol', '1')] >>> _match(b'f(_)', parse(b'f(1, 2)')) r­r?rA)r«r Ú matchtree)ÚpatspecrªÚpatterns rSÚ_matchr¸Hs0€ô˜'Ó"€GÜ × Ñ Ø�Ð(¨;¸Ð*@ó ðr[có —tdd||f«S)Ns!ancestors(_) and not ancestors(_)r6)r¸)ÚrevsÚbasess rSÚ _matchonlyr¼Vs€Ü Ð6¸ÀÀuÐ8MÓ NÐNr[cóâ—t|t«s|S|d}|dk(rud|df}|dddk(rtd||ddf«S|dddk(r td |f«S|ddd k(rtd ||ddf«S|ddd k(rStd |f«S|dk(r|td|ddz«fS|dk(r)|dddk(rtd|dd|dd|df«S|ftd„|ddD««zS)zrRewrite raw parsed tree to resolve ambiguous syntax which cannot be handled well by our simple top-down parserrrr rr@r)r*r(r+r0r1r/r2r;©rANrró relsubscriptc3ó2K—|]}t|«–—Œy­wrN)Ú_fixops©rPÚys rSrTz_fixops..usèø€Ð3©U¨œ Ÿ©Uùó‚)r^ÚtuplerÁ)rYrŽÚposts rSrÁrÁZsH€ô �aœÔ Øˆà ˆ1‰€BØ ˆY‚ð˜q ™tÐ$ˆØ ˆQ‰4�‰7�nÒ $ܘK¨¨q°©t°A©wÐ7Ó8Ð 8Ø ˆq‰T�!‰W˜Ò &ܘO¨TÐ2Ó3Ð 3Ø ˆq‰T�!‰W˜ Ò #ܘH d¨A¨a©D°©GÐ4Ó5Ð 5Ø ˆq‰T�!‰W˜ Ò #ܘL¨$Ð/Ó0Ð 0Ø ˆuŠð”G˜J¨¨1¨2¨Ñ.Ó/Ð0Ð0Ø ˆ|Ò   !¡ Q¡¨;Ò 6䘨¨1©¨a©°!°A±$°q±'¸1¸Q¹4Ð@ÓAÐAà ˆ5”5Ñ3¨Q¨q¨r©UÓ3Ó3Ñ 3Ð3r[có²—|€|S|d}|dk(rttdg|dd¢­Ž«S|dk(rttdg|dd¢­Ž«S|dk(rttd|d««S|d k(rtjt d ««‚|d k(rttd |d««S|d k(rttd|d««S|dk(r(t |dt d««}tdd|zf«S|dvr|S|dk(r|dfS|dvr|t|d«fS|dk(rt|d«S|dvr!t|d«}t|d«}|||fS|dk(r0t|d«}t|d«}t|d«}||||fS|dk(r|ft d„|ddD««zS|dk(r||dt|d«fS|dk(r||dt|d«fStd|z«‚) Nrr%s _ and not _rr9ó only(_, _)r:sonly(_)r(scan't use '::' in this contextr)s ancestors(_)r+sdescendants(_)r#scan't negate thatrCr!©rCrBósmartsetr/>r;r3r0r2r r>r6r1rrr*rrr@r¿r>rAc3ó2K—|]}t|«–—Œy­wrN©Ú_analyzerÂs rSrTz_analyze..¦sèø€Ð8±%¨QœX aŸ[±%ùrÄr?róinvalid operator %r)rÍr³rrkrr~rÅr‚)rYrŽrqÚtaÚtbÚtcs rSrÍrÍxs?€Ø€yØˆà ˆ1‰€BØ ˆX‚~Üœ˜~Ð6°°!°"°Ò6Ó7Ð7Ø ˆwŠÜœ˜}Ð5¨q°°¨uÒ5Ó6Ð6Ø ˆ{Ò Üœ˜z¨1¨Q©4Ó0Ó1Ð1Ø ˆ~Ò Ü×ÑœqÐ!BÓCÓDÐDØ ˆ~Ò Üœ˜°°!±Ó5Ó6Ð6Ø ˆÒ ÜœÐ0°!°A±$Ó7Ó8Ð8Ø ˆyŠÜ �a˜‘dœAÐ2Ó3Ó 4ˆÜ˜ D¨1¡HÐ-Ó.Ð.Ø Ð2Ñ 2ØˆØ ˆ{Ò Ø�DˆzÐØ ÐHÑ HØ”H˜Q˜q™T“NÐ#Ð#Ø ˆxŠÜ˜˜!™‹~ÐØ ðñ ô�a˜‘d‹^ˆÜ �a˜‘d‹^ˆØ�B˜ˆ|ÐØ ˆÒ Ü �a˜‘d‹^ˆÜ �a˜‘d‹^ˆÜ �a˜‘d‹^ˆØ�B˜˜BÐÐØ ˆwŠØˆu”uÑ8°!°A°B±%Ó8Ó8Ñ8Ð8Ø ˆ{Ò Ø�A�a‘Dœ( 1 Q¡4›.Ð)Ð)Ø ˆwŠØ�A�a‘Dœ( 1 Q¡4›.Ð)Ð)Ü Ð+¨bÑ0Ó 1Ð1r[có—t|«S)zãTransform raw parsed tree to evaluatable tree which can be fed to optimize() or getset() All pseudo operations should be mapped to real operations or functions defined in methods or symbols table respectively. rÌrXs rSÚanalyzerÓ®s€ô �A‹;Ðr[cóŽ‡ ‡‡—|€d|fS|d}|dvrd|fS|dk(r·t|d«\}}t|d«\}}t||«}tdd||f«}|r%t|d«dvr|t d |d|d«fSt ||«xs t ||«}|r|t d g|dd¢­ŽfStd |«}|r |d ||dffS||kDrd }||||ffS|dk(r¸gggcŠŠŠ ˆ ˆˆfd„}t |d«D]_} t| «\}} | �$| ddk(s| ddk(r‰ j|| f«Œ7|«‰j|«‰j| «Œa|«t‰«dk(r ‰d‰dfSt‰«|dt‰«zffS|dk(rGtd|d«rtt d««} | d| dfSt|d«} | d|| dffS|dk(rd|fS|dvrt|d«} | d|| dffS|dvr,t|d«\}}t|d«\}}||z|||ffS|dvrt|d«\}} ||| |dffS|dk(rt|d«\}} ||| |d|dffS|dk(r&td„|ddD«Ž\ŠŠt‰«|f‰zfS|dk(rt|d«\}} |||d| ffS|dk(rst|d«} t|d«\}}ttj| «d d«}td!|«}| d"k(r|r||zt d#|d«fS||z||d|ffSt!d$|z«‚)%NrrÉgà?r6rr@s_() & ancestors(_)>ódraftósecretó _notpublics_phaseandancestors(_, _)rÈsnot _s differences andsmallyr;cóð•—‰syt‰«dk(r ‰d\}}n4djd„‰D««}tdd|f«}t|«\}}‰j |«‰j |«‰dd…=y)Nrróc3ó,K—|] \}}|d–—Œy­w)rNrO)rPÚwÚts rSrTz-_optimize..flushss..ßsèø€Ð3±©¨¨1˜q �t±ùs‚s_list(_)rC)rfÚjoinr³Ú _optimizeÚappend)rÛrÜrqrÃÚssÚtsÚwss €€€rSÚflushssz_optimize..flushssÙsoø€ÙØÜ�2‹w˜!Š|ؘ!‘u‘�‘1à—J‘JÑ3±Ó3Ó3�ܘ;¨°A¨Ó7�Ü  “|‘��1Ø �I‰I�aŒLØ �I‰I�aŒLØ’1‘r[rCrBr¾r3spublic()s _notpublic()r/)r0r2r )r*r1)rrrrr¿r>rAc3ó2K—|]}t|«–—Œy­wrN©rÞrÂs rSrTz_optimize.. sèø€Ð3©U¨”y —|©UùrÄr?rÚ_weightscommonancestors(_)sheadss_commonancestorheads(_)rÎ)rÞršr¸rzr³r¼r‹rßrfr›rÅÚzipÚsumrÚsymbolsr§r‚)rYrŽÚwarÏÚwbrÐrÛÚmrãrÃrÜÚoÚfràrárâs @@@rSrÞrÞ¸sú€Ø€yØ�!ˆtˆ à ˆ1‰€BØ Ð 0Ñ0Ø�Aˆvˆ Ø ˆvŠÜ˜1˜Q™4“‰ˆˆBܘ1˜Q™4“‰ˆˆBÜ ��B‹Kˆô Ð(¨6°2°rÐ*:Ó ;ˆÙ ”˜1˜Q™4“Ð$HÑHØ”fÐ8¸!¸A¹$ÀÀ!ÁÓEÐEÐ Eô �r˜2Ó Ò 4¤*¨R°Ó"4ˆÙ Ø”f˜]Ð3¨Q¨q¨r¨UÒ3Ð3Ð 3ä �8˜RÓ ˆÙ ؘ  r¨1¨Q©4Ð0Ð0Ð 0Ø �Š7؈BØ�2�r˜2�,ˆÐØ ˆuŠð˜˜Rˆ ˆˆB�ö ô˜˜1™–ˆAܘQ“<‰DˆAˆq؈} ! A¡$¨)Ò"3°q¸±t¸yÒ7HØ— ‘ ˜1˜a˜&Ô!ØÙ ŒIØ �I‰I�aŒLØ �I‰I�a�Lðñ Œ Ü ˆr‹7�aŠ<Ø�a‘5˜"˜Q™%�<Ð Ü�2‹w˜˜Z¬%°«)Ñ3Ð4Ð4Ð4Ø ˆvŠä �+˜q ™tÔ $Üœ& Ó1Ó2ˆAØ�Q‘4˜˜1™�:Ð ä˜!˜A™$“ˆAØ�Q‘4˜"˜a ™d˜Ð#Ð #Ø ˆ{Ò Ø�!ˆtˆ Ø Ð9Ñ 9Ü �a˜‘d‹OˆØ�‰t�b˜!˜A™$�ZÐÐØ Ð&Ñ &ܘ1˜Q™4“‰ˆˆBܘ1˜Q™4“‰ˆˆBØ�B‰w˜˜R ˜ Ð$Ð$Ø ÐBÑ Bܘ˜1™‹‰ˆˆ1Ø�2�q˜!˜A™$�-ÐÐØ ˆÒ ܘ˜1™‹‰ˆˆ1Ø�2�q˜!˜A™$  !¡Ð%Ð%Ð%Ø ˆwŠÜÑ3¨Q¨q¨r©UÓ3Ð4‰ˆˆBÜ�2‹w˜˜ ™ Ð"Ð"Ø ˆ{Ò Ü˜˜1™‹‰ˆˆ1Ø�2�q˜‘t˜Q�-ÐÐØ ˆwŠÜ �a˜‘d‹OˆÜ˜1˜Q™4“‰ˆˆBÜ ”G—K‘K “N I¨qÓ 1ˆÜ Ð(¨"Ó -ˆð �Š=™QØ�r‘6œ6Ð"<¸aÀ¹dÓCÐCÐ Cà�2‰v˜˜A˜a™D "�~Ð%Ð%Ü Ð+¨bÑ0Ó 1Ð1r[có"—t|«\}}|S)z[Optimize evaluatable tree All pseudo operations should be transformed beforehand. rå)rªræÚnewtrees rSÚoptimizerñs€ô ! “Ñ€GˆWØ €Nr[ó$cóX—|r$|jd«r|jd«rd}tjt«}|j t |||¬««\}}|t |«k7rtjtd«|«‚ttj|d««S)aQGenerate a parse tree of given spec with given tokenizing options >>> _parsewith(b'foo($1)', syminitletters=_aliassyminitletters) ('func', ('symbol', 'foo'), ('symbol', '$1')) >>> from . import error >>> from . import pycompat >>> try: ... _parsewith(b'$1') ... except error.ParseError as e: ... pycompat.sysstr(e.message) ... e.location "syntax error in revset '$1'" 0 >>> try: ... _parsewith(b'foo bar') ... except error.ParseError as e: ... pycompat.sysstr(e.message) ... e.location 'invalid token' 4 srevset(rN)rRrns invalid token)rAr;) Ú startswithÚendswithr Úelementsr¨rxrfrrkrrÁÚsimplifyinfixops)r©rRrnrwrªrrs rSÚ _parsewithrø+sŽ€ñ,�$—/‘/ *Ô-°$·-±-ÀÔ2E؈Ü� ‰ ”hÓ€AØ—‘Ü�˜f°^ÔDó�I€Dˆ#ð Œc�$‹iÒÜ×ÑœqÐ!1Ó2°CÓ8Ð8Ü ”6×*Ñ*¨4Ð1AÓBÓ CÐCr[có@—eZdZdZed«Zed„«Zed„«Zy)Ú _aliasrulesz0Parsing and expansion rule set of revset aliasess revset aliascó$—t|t¬«S)aParse alias declaration/definition ``spec`` This allows symbol names to use also ``$`` as an initial letter (for backward compatibility), and callers of this function should examine whether ``$`` is used also for unexpected symbols or not. ©rn)røÚ_aliassyminitletters)r©s rSÚ_parsez_aliasrules._parseQs€ô˜$Ô/CÔDÐDr[cóX—|ddk(r"|dddk(r|ddt|d«fSyy)NrrrrBr@)r‹©rªs rSÚ _trygetfuncz_aliasrules._trygetfunc[sA€à �‰7�gÒ  $ q¡'¨!¡*° Ò"9ؘ‘7˜1‘:œw t¨A¡wÓ/Ð/Ð /ð#:Ð r[N) Ú__name__Ú __module__Ú __qualname__Ú__doc__rÚ_sectionÚ staticmethodrþrrOr[rSrúrúLs7„Ù:á�Ó!€HàñEóðEðñ0óñ0r[rúcó —tj|«}tj||«}|�`t|j ««D]D\}}|j sŒ|j rŒ |td«|j z«d|_ŒF|S)zCExpand aliases in a tree, aliases is a list of (name, value) tupless warning: %s T)rúÚbuildmapÚexpandÚsortedÚitemsrÚwarnedr)rªÚaliasesÚwarnÚnameÚaliass rSÚ expandaliasesrasu€ä×"Ñ" 7Ó+€GÜ × Ñ ˜g tÓ ,€Dà ÐÜ! '§-¡-£/Ö2‰KˆD�%Ø�{‹{ 5§<£<Ù”QÐ'Ó(¨E¯K©KÑ8Ô9Ø#�• ð3ð €Kr[có’—t|t«r|ddvr|S|ddk(r•|g}g}|r{|j«}|ddk(r|jt |dd««nB|ddvr|j |d«n&t d«|dz}tj|«‚|rŒ{dd j|«fStd „|D««S) z(Fold elements to be concatenated by `##`rrÉrrN©rCrBs#"##" can't concatenate "%s" elementrCr[c3ó2K—|]}t|«–—Œy­wrN)Ú foldconcat)rPrÜs rSrTzfoldconcat..„sèø€Ð1©D q”Z —]©DùrÄ) r^rÅÚpopÚextendÚreversedrßrrrkrÝ)rªÚpendingrsÚeÚmsgs rSrrns×€ä �dœEÔ " d¨1¡gð2ñ'ð ˆ Ø ˆA�w�*ÒØ�&ˆØ ˆÙØ— ‘ “ ˆAØ�‰t�zÒ!Ø—‘œx¨¨!¨"¨›Õ/Ø�1‘Ð/Ñ/Ø—‘˜˜1™•äÐBÓCÀqÈÁtÑL�Ü×&Ñ& sÓ+Ð+òð˜3Ÿ8™8 A›;Ð'Ð'äÑ1©DÓ1Ó1Ð1r[cóî— t||¬«S#tj$rR}|j�@|j}|j dd«}|dzd|dzzzdzt d«z|_‚d}~wwxYw)N)rRó ó rs^ shere)rørrkÚlocationÚreplacerÚhint)r©rRÚinstÚlocs rSr¨r¨‡sy€ð ܘ$ vÔ.Ð.øÜ × Ñ ò Ø �=‰=Ð $Ø—-‘-ˆCà—<‘<  tÓ,ˆDð ˜u™  t¨s°Q©wÑ'7Ñ7¸%Ñ?Ä!ÀGÃ*ÑLˆDŒIØ ûð ús‚ �A4¢A A/Á/A4cóX—dtjtj|««zS)zÝQuote a value in order to make it safe for the revset engine. >>> _quote(b'asdf') "'asdf'" >>> _quote(b"asdf'\"") '\'asdf\\\'"\'' >>> _quote(b'asdf\'') "'asdf\\''" >>> _quote(1) "'1'" s'%s')r Ú escapestrr ra)rqs rSÚ_quoter'—s%€ð ”Z×)Ñ)¬(×*:Ñ*:¸1Ó*=Ó>Ñ >Ð>r[cóv—|dk(rdt|«zS|dk(r t|«S|dk(r&t|t«st‚t |«d|zS|dk(rtt |««S|dk(r t|j««Stjtd«|z«‚#t$rt‚wxYw) Nóds_rev(%d)ósrVs(%s)ónóbs&unexpected revspec format character %s) r�r'r^r_Ú TypeErrorr¨rÚbranchÚAttributeErrorrrkr)rtÚargs rSÚ_formatargtyper1¦s·€ØˆD‚yØœS ›XÑ%Ð%Ø ˆdŠÜ�c‹{ÐØ ˆdŠÜ˜#œuÔ%܈OÜ ˆcŒ ؘ‰}ÐØ ˆdŠÜ”c˜#“hÓÐØ ˆdŠð ܘ#Ÿ*™*›,Ó'Ð 'ô × Ñ œ1ÐFÓGÈ!ÑKÓ LÐLøôò ܈Oð ús Á.B(Â(B8có¤—t|«}|dk(ry|dk(rt||d«S|dk(r t|«S|dk(rdtdj |««zS|dk(rd dj d „|D««zS|d k(r d dj d „|D««zS|dz}dt|d||«t||d|«fzS#t $rt ‚wxYw)Nró _list('')rr)r*s _list(%s)rÙr+s_hexlist('%s')c3ó2K—|]}t|«–—Œy­wrNr©rPr–s rSrTz!_formatlistexp..Åsèø€Ð-@¹a¸¬c°!¯f¹aùrÄr,s _list('%s')c3ó<K—|]}|j«–—Œy­wrN)r.r5s rSrTz!_formatlistexp..Èsèø€Ð.EÁ1¸a¨q¯x©x¯zÁ1ùs‚r@s (%s or %s))rfr1Ú_formatintlistr'rÝr/r-Ú_formatlistexp)rqrÜrsrìs rSr8r8ºsð€Ü ˆA‹€A؈A‚vØØ ˆaŠÜ˜a  1¡Ó&Ð&Ø ˆdŠÜ˜aÓ Ð Ø ˆdŠØœf U§Z¡Z°£]Ó3Ñ3Ð3Ø ˆdŠØ  5§:¡:Ñ-@¹aÓ-@Ó#@Ñ@Ð@Ø ˆdŠð Ø! E§J¡JÑ.EÁ1Ó.EÓ$EÑEÐ Eð ˆQ‰€AØ œN¨1¨R¨a¨5°!Ó4´nÀQÀqÀrÀUÈAÓ6NÐOÑ OÐOøô ò ܈Oð ús Á>B?Â?Ccóæ— t|«}|dk(ry|dk(rtd|d«Sddjd„|D««zS#ttf$rt j td««‚wxYw) Nrr3rr)s_intlist('%s')rÙc3ó8K—|]}dt|«z–—Œy­w)s%dN)r�r5s rSrTz!_formatintlist..×sèø€Ð-KÁdÀ¨e´c¸!³f­nÁdùs‚óinvalid argument for revspec)rfr1rÝr-r‚rrkr)Údatarss rSr7r7Ðsz€ðCÜ �‹IˆØ �Š6ØØ �!ŠVÜ! $¨¨Q©Ó0Ð 0Ø  5§:¡:Ñ-KÁdÓ-KÓ#KÑKÐKøÜ ”zÐ "òCÜ×ÑœqÐ!@ÓAÓBÐBðCús‚A“A§AÁ.A0có8‡—djˆfd„|D««S)Ns, c3ó6•K—|]}t‰|«–—Œy­wrN)r1)rPr–rÜs €rSrTz"_formatparamexp..Ýsøèø€Ð9±D¨q”n Q¨×*±Dùsƒ)rÝ)ÚargsrÜs `rSÚ_formatparamexpr@Üsø€Ø �:‰:Ó9±DÓ9Ó 9Ð9r[)ólópcó2—t||«}g}|D]t\}}|€|j|«Œ|dk(r?t|t«r t |«}|jt t |«««Œ^tjd|z«‚dj|«S)a; This is a convenience function for using revsets internally, and escapes arguments appropriately. Aliases are intentionally ignored so that intended expression behavior isn't accidentally subverted. Supported arguments: %r = revset expression, parenthesized %d = rev(int(arg)), no quoting %s = string(arg), escaped and single-quoted %b = arg.branch(), escaped and single-quoted %n = hex(arg), single-quoted %% = a literal '%' Prefixing the type with 'l' specifies a parenthesized list of that type, and 'p' specifies a list of function parameters of that type. >>> formatspec(b'%r:: and %lr', b'10 or 11', (b"this()", b"that()")) '(10 or 11):: and ((this()) or (that()))' >>> formatspec(b'%d:: and not %d::', 10, 20) '_rev(10):: and not _rev(20)::' >>> formatspec(b'%ld or %ld', [], [1]) "_list('') or _rev(1)" >>> formatspec(b'keyword(%s)', b'foo\xe9') "keyword('foo\\xe9')" >>> b = lambda: b'default' >>> b.branch = b >>> formatspec(b'branch(%b)', b) "branch('default')" >>> formatspec(b'root(%ls)', [b'a', b'b', b'c', b'd']) "root(_list('a\\x00b\\x00c\\x00d'))" >>> formatspec(b'sort(%r, %ps)', b':', [b'desc', b'user']) "sort((:), 'desc', 'user')" >>> formatspec(b'%ls', [b'a', b"'"]) "_list('a\\x00\\'')" óbasesetóunknown revspec item type: %rr[) Ú _parseargsrßr^Úsetr r7rŠrr`rÝ)Úexprr?ÚparsedÚretrÜr0s rSÚ formatspecrKæsŠ€ôJ˜˜dÓ #€FØ €CÛ‰ˆˆ3Ø ˆ9Ø �J‰J�s�OØ �*Š_ܘ#œsÔ#ܘS“k�Ø �J‰J”~¤d¨3£iÓ0Õ 1ä×(Ñ(Ð)IÈAÑ)MÓNÐ Nðð �8‰8�C‹=Ðr[có—t||«}g}g}|D]o\}}|€|j|«Œ|dk(r:dtj|«f}|j|«|jd«ŒYt j d|z«‚dj |«}t|t¬«}tj|dg|¢­Ž}t|«}t|«}t|«}|S)z€DØ €Kr[cóÖ—tj|«}t|«}g}d}|t|«k�r|j d|«}|dkr|j d||df«nì|j d|||f«|dz} ||}|dk(r|j d|f«|dz }Œ| t|«}tj|«}|rW|dz }|dk(} ||}| r |dk(r|r|j d |f«|dz }ŒÑ |j d|t|«|«f«n |j dt#||«f«|dz }|t|«kr�Œ t|«tjtd ««‚#t $rtjtd««‚wxYw#t$rtjtd««‚wxYw#t $rtjtd««‚wxYw#tt f$rtjtd ««‚wxYw#tt f$rtjtd ««‚wxYw#t$rY|SwxYw) zóparse the expression and replace all inexpensive args return a list of tuple [(arg-type, arg-value)] Arg-type can be: * None: a string ready to be concatenated into a final spec * 'baseset': an iterable of revisions rr8Nrs#incomplete revspec format charactersmissing argument for revspecrAr)rDr;s$too many revspec arguments specified)r raÚiterrfÚfindrßÚ IndexErrorrrkrÚnextÚ StopIterationÚ_formatlistfuncsr§rŠr-r‚r1) rHr?ÚargiterrJrrÚqrvr0rîÚislists rSrFrF0s—€ô × Ñ ˜DÓ !€DÜ�4‹j€GØ €CØ €CØ ”�D“ ‹/Ø �I‰I�d˜CÓ ˆØ ˆqŠ5Ø �J‰J˜˜d 3 4˜jÐ)Ô *Ø Ø � ‰ �D˜$˜s 1˜+Ð&Ô'Ø�!‰eˆð NØ�S‘ ˆAð �Š9Ø �J‰J˜˜a�yÔ !Ø �1‰HˆCØ ð GÜ�w“-ˆCô × Ñ  Ó #ˆÙ à �1‰HˆCؘ$‘YˆFð Ø˜‘I�ñ ˜!˜tš)©ð— ‘ ˜J¨Ð,Ô-Ø�q‘�Øð KØ— ‘ ˜D¡!¤D¨£I¨q£/Ð2Õ3ð  KØ— ‘ ˜D¤.°°CÓ"8Ð9Ô:ð ˆq‰ˆða ”�D“ Œ/ðd Ü ˆWŒ Ü×ÑœqÐ!HÓIÓJÐJøôWò NÜ×"Ñ"¤1Ð%KÓ#LÓMÐ Mð Nûôò GÜ×"Ñ"¤1Ð%DÓ#EÓFÐ Fð Gûôò Ü×&Ñ&ÜÐ<Ó=óðð ûôœzÐ*ò KÜ×&Ñ&¤qÐ)HÓ'IÓJÐJð Kûô œzÐ*ò KÜ×&Ñ&¤qÐ)HÓ'IÓJÐJð Kûô ò Ø Ø €Jð úsNÁ>E8Â" F#ÃGÃ7#G9ÄH*Å)IÅ8(F Æ#(G Ç(G6Ç9.H'È*.IÉ I(É'I(có.—tj|d«S)Nr)r Ú prettyformatrs rSr[r[ws€Ü × Ñ ˜tÐ%;Ó <Ð>> gethashlikesymbols(parse(b'3::abe3ff')) ['3', 'abe3ff'] >>> gethashlikesymbols(parse(b'precursors(.)')) [] >>> gethashlikesymbols(parse(b'precursors(34)')) ['34'] >>> gethashlikesymbols(parse(b'abe3ffZ')) [] rrBrr>N)rgrfÚgethashlikesymbols)rªÚresultsÚsubtrees rSriri–ss€ñ ؈ à ˆA�w�)ÒÜ ˜T !™WÔ %ؘ‘G�9Ð ð €Iô ˆT‹�aŠØˆØ˜A˜B“xˆGØ Ô)¨'Ó2Ñ 2‰Gð àˆØ €Ir[)NNNr�rN)KÚstringÚi18nrr rÚnoderÚrr r r Úutilsr rörlrérirGÚ iterbytestrrhÚsysbytesÚ ascii_lettersÚdigitsr]ÚbytechrÚrangerbrcrxÚobjectr€rzr~r„rˆr‹r�r˜rœr¤r¦r«r³r¸r¼rÁrÍrÓrÞrñrýrøÚbasealiasrulesrúrrr¨r'r1r8r7r@rVrKrOrFr[r^r`ÚreÚcompilerdrgrirOr[rSÚr{sðóåÝÝ÷õõð' àÐ Cð' ð Ð 9ð' ð Ð 3ð ' ð  Ð 3ð ' ð  Ð 3ð ' ð Ð :ð' ð Ð 9ð' ð ð ð' ð  ð ð!' ð. Ð Lð/' ð0 Ð 0ð1' ð2 Ð .ð3' ð4 Ð .ð5' ð6 Ð ,ð7' ð8 Ð 4ð9' ð: Ð ,ð;' ð< Ð +ð=' ð> ,Ø 1Ø -Ø %Ø %Ø/Ø/Ø 'òM' €òR #€à €à�t� € ÙÐ+�x×+Ñ+Ð,?Ó@ÓAÐñØ€H×ÑØˆ×ј&×.Ñ.Ó/Ø ˆ(× Ñ ˜FŸM™MÓ *ñ +à ñ óóñ ‰ˆH× Ñ ™e C¨›oÓ.Ó/ñ 0€ð¡Ð$8 H×$8Ñ$8¸Ó$?Ó @Ñ@€ óEñT ‹(€ò/ò  ð 'ó$ò òò  ð)0¸ó Gò òð€ òòAò òOò4ò<32òlòb2òJð'¨$¨Ñ/ÐóDôB0�&×'Ñ'ô0ó* ò2ó2 ò ?òMò(Pò, Cò:ð Ø ñÐò 0òfò.DòN=òò ð �'‰'�/‰/Ð/Ó 0€ò!ó r[