c1c ddlZddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z"m#Z#ddl$m%Z%m&Z&m'Z'ej(Z(ej)Z)ej*Z*ej+Z+ej,Z,ej-Z-ej.Z.ej/Z/e j0Z0e j1Z1e j2Z2e j3Z3e e fZ4dZ5d Z6d Z7e6fd Z8d Z9d Z:dZ;dZdZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLd ZMd!ZNd"ZOd#ZPd$ZQejRZReSZTejUZVeVd%d&ZWeVd'd(ZXeVd)d*d+,d-ZYeVd.d*d/,d0ZZ dd2Z[eVd3d*4d5Z\eVd6d*4d7Z]d8Z^d9Z_eVd:d*d;,d<Z`eVd=d*4d>ZaeVd?d*4d@ZbeVdAd*4dBZceVdCd*d;,dDZdeVdEd*4dFZeeVdGd*4dHZfdIZgdJZheVdKd*4dLZieVdMd*d;,dNZjeVdOd*4dPZkeVdQd*4dRZleVdSd*4dTZmeVdUd*4dVZneVdWdXYdZZoeVd[d*4d\ZpeVd]d*d;,d^ZqeVd_d*d;,d`Zr ddaZseVdbd*4dcZteVddd*4deZueVdfd*d;,dgZveVdhdiYdjZweVdkd*4dlZxeVdmd*d*ndoZyeVdpd1dX,dqZzeVdrd*4dsZ{eVdtd*4duZ|eVdvd*4dwZ}eVdxd*d*dydzZ~dd{ZeVd|d*4d}ZeVd~d*4dZeVdd*4dZeVddZeVdd*4dZeVdd;YdZeVdd*4dZeVdd*d;,dZeVdd*4dZeVdd*d*ndZeVdd*4dZeVdd*d;,dZeVdd*d*dydZeVdd*d*ndZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*d+,dZeVddZdZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*4dZeVdd1d;,dZeVdd*4dZeVdd*4dZdZeVdd*4dZdZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*4dZ!dZeVdd*d*ndÄZeVdd*4dńZeVdd*4dDŽZeVdd*4dɄZeVdd14d˄ZeVdd*d+,d̈́ZeVdd*4dτZeVdd*4dфZeVdd*d*ndӄZUeVdd*4dՄZeVdd*d*dydׄZeVdd*4dلZdZe dz ZefdۄZejd܄d݄dބd߄dejedZdZeVdd*d*d;ydZeVddZdZeVdd*4dZddZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*4dZeVdd*d;,dZeVdd*d,dZdZeVdd*d*ndZdZeVdd*d*dydZdZeVdd*d*ndZide=de>de?de@deBde;de;deCdeDd eGd eHd eEd eId eMdeNdeOdePeQe_eee<dZeKeKdZeLeLdZǐdZȐddZddZɐdZʐdZeddeVeRZdS(N)_getattr)binnullrevwdirrev)dagopdestutildiffutilencodingerrorgrephbisectmatchobsoleteobsutilpathutilphasespycompat registrarrepoview revsetlangscmutilsmartsetstackutil)dateutil stringutilurlutilsanysdefinefollowc|s!tjtdt|d||g|ddRd|iS)Nsmissing argumentrrorder)r ParseErrorrmethodsreposubsetxr#s 2/usr/lib/python3/dist-packages/mercurial/revset.pygetsetr+psT 7q!455666 1Q4=v ;!"" ; ; ;U ; ;;c||}dD]>}||vr8 |||cS#tj$rY:wxYw?dS)N)sourcestransplant_sources rebase_source)extrarevrRepoLookupError)r'rr/labels r* _getrevsourcer4vs GMMOOED E>> E%L)--/////(      4sAAAcZttjtj|SN)sortedrrapply maybebytestr)xss r*_sortedbr;s (/("7<< = ==r,c|s!tjtdtjtj||}||vs|t vr%t|trt|gStS)Ns$empty string is not a valid revision) rr$rrintrev revsymbol _virtualrevs isinstance fullreposetbasesetr&s r* stringsetrCs{ Kq!HIIJJJw(q1122AF{{a<''Jv{,K,K's|| 99r,c,|tkr||zS||zS)z1argument is already a smartset, use that directly) followorderr&s r* rawsmartsetrFs! z6zr,c t|t||}t|t||}|r|stSt|||||Sr6)r+rArB _makerangesetfirstlast)r'r(r)yr#mns r*rangesetrNsst[&&**At[&&**A Ayy vqwwyy!&&((E B BBr,c^|Jt||d|j|SNr)rH changelogtiprevr&s r*rangeallrSs/ 999 vq$.*?*?*A*A5 I IIr,ct|t||}|stSt||d||SrP)r+rArBrHrJ)r'r(rKr#rMs r*rangeprerUsKt[&&**A yy vq!&&((E : ::r,ct|t||}|stSt||||j|Sr6)r+rArBrHrIrQrR)r'r(r)r#rLs r* rangepostrWs`t[&&**A yy  faggii!6!6!8!8%  r,c||krt|g}n|tkr0t||t|t|gz}nw|tkr=t|gt||j|dz z}n/||krt|||dz}nt|||dz }|t kr||zS||zSNr)rBr spansetlenrQrR defineorder)r'r(rLrMr#r2s r*rHrHsAvv QCLL g D!SYY ' ''1#,, 6 g QCLL74)>)>)@)@!a%HH H Q D!QU # # D!QU # # 6zzr,c t|}tj|t|||t|||d}||zS)NT) includepath)rAr reachablerootsr+)r'r(r)rKr#r2r:s r*dagranger`sSDA   fT1a  &q!"4"4$   B B;r,c z|tkrt}nt}t|t||||||Sr6anyorderrEr+r'r(r)rKr#yorders r*andsetrfs;  $tVQ666 B BBr,c z|tkrt}nt}t|t||||||Sr6rbrds r* andsmallysetrhs;  $tVQ77E B BBr,cVt||||t|||tz Sr6r+rcr'r(r)rKr#s r* differencesetrls) $5 ) )F4H,M,M MMr,c|sJt|dkrt|||d|St|dz}t|||d||}t||||d|}||zS)Nrr)r[r+ _orsetlist)r'r(r:r#pabs r*roros III 2ww!||dFBqE5111 B1 A4BQB//A4ABB//A q5Lr,ct|}|stS|tkr'|t|t ||t zSt||||Sr6)getlistrBrErorArc)r'r(r)r#r:s r*orsetrus_ B yy  4T):):BIIII$E222r,c6|t|||tz Sr6rjr&s r*notsetrws F4H55 55r,ct|}|tvrt||||||SdtD}tj||)Nc8g|]}t|dk|Srr[.0r2s r* zrelationset.. s#:::as1vvzzzzzr,) getsymbol relationskeysrUnknownIdentifier)r'r(r)rKr#relrelnamess r* relationsetrsd A,,C i~dFAsE:::::9>>++:::H  !#x 0 00r,cd}d}||cxkrdkrnnd}|dkrt|d | dzf}|dkrt|d|dzf}||fS)aSplit range with bounds a and b into two ranges at 0 and return two tuples of numbers for use as startdepth and stopdepth arguments of revancestors and revdescendants. >>> _splitrange(-10, -5) # [-10:-5] ((5, 11), (None, None)) >>> _splitrange(5, 10) # [5:10] ((None, None), (5, 11)) >>> _splitrange(-10, 10) # [-10:10] ((0, 11), (0, 11)) >>> _splitrange(-10, 0) # [-10:0] ((0, 11), (None, None)) >>> _splitrange(0, 10) # [0:10] ((None, None), (0, 11)) >>> _splitrange(0, 0) # [0:0] ((0, 1), (None, None)) >>> _splitrange(1, -1) # [1:-1] ((None, None), (None, None)) NNr)rrr)minmax)rqrr ancdepths descdepthss r* _splitranger sy(IJA{{{{{{{{{ 1uu!QiiZ!a( 1uu!QiiQ' j  r,c.d}t||||||S)N)rangeallN)generationssubrel)r'r(r)rr#zs r*generationsrelr,sA T61c1e < <> 788$q()#a'(    DAq2=Q1B1B.Xw.)XI-yy $ D))1 - -D yy 5  tT5(G D D U !$eY I II    tT5(G D D    tUIx H H A:r,ct|}|tvrt|||||||SdtD}tj||)Nc8g|]}t|dk|Srzr{r|s r*r~z#relsubscriptset..Ws#CCCaA  r,)rsubscriptrelationsrrr)r'r(r)rKrr#rrs r*relsubscriptsetrOsk A,,C    !#&tVQQFFFCC-2244CCCH  !#x 0 00r,cDtjtd)Ns%can't use a subscript in this contextrr$rrks r* subscriptsetr[s  1EFF G GGr,cbtjtdtd)Ns can't use a list in this contextssee 'hg help "revsets.x or y"')hintr)r'r(r:optss r*listsetr_s4   -.. 2 3 3   r,cDtjtd)Ns*can't use a key-value pair in this contextr)r'r(kvr#s r* keyvaluepairrfs  1JKK L LLr,c t|}|tvr9t|}t|ddr|||||S||||SdfdtD}t j||)N _takeorderFc(t|ddduS)N__doc__r)fns r*zfunc..rsgb)T22$>r,c0g|]\}}||Sr)r}rrkeeps r*r~zfunc..ts* 9 9 9'1bR 9A 9 9 9r,)rsymbolsritemsrr) r'r(rqrrr#ffuncsymsrs @r*rrjs! AG||qz 4u - - 04fa// /tD&!$$$ > >D 9 9 9 9W]]__ 9 9 9D  !!T * **r,s _destupdatec t|dd}|ttj|fit j|dgzS)Nlimitscleanr) getargsdictrBr destupdater strkwargs)r'r(r)argss r* _destupdatersW q(H - -D G  T > >X%7%=%= > >q AB r,s _destmergecd}|t|t||}|ttj||gzS)N) sourceset)r+rArBr destmerge)r'r(r)rs r* _destmergersMI}4T!2!2A66 GX/ JJJKLL LLr,s adds(pattern)T)safeweightc`t|td}t|||dS)zChangesets that add a file matching pattern. The pattern without explicit kind like ``glob:`` is expected to be relative to the current directory and match against a file or a directory. sadds requires a patternadded getstringr checkstatusr'r(r)pats r*addsrs0 Aq344 5 5C tVS' 2 22r,sancestor(*changeset)g?c|tt|t||t} |t |}n#t $rt cYSwxYw|D]}|||}tj |}||vrt |gSt S)zA greatest common ancestor of the changesets. Accepts 0 or more changesets. Will return empty list when passed no args. Greatest common ancestor of a single changeset is that changeset. r#) iterrurArcnext StopIterationrBancestorrr=)r'r(r)reviterancr2s r*rrs5{400!8DDDEEG4==! yy $$ll47##sAF{{s|| 99sA A%$A%Fct|t||}|stStj|||||}||zSr6)r+rArBr r)r'r(r) followfirst startdepth stopdepthheadsrs r* _ancestorsrsQ 4T**A . .E yy 4 ZKKA A:r,sancestors(set[, depth]))rct|dd}d|vr!tjtddx}}d|vr2t |dd}|dkrtjd |}d |vrOt |d td }|dkr!tjtd |d z}t |||d||S)zChangesets that are ancestors of changesets in set, including the given changesets themselves. If depth is specified, the result only includes changesets up to the specified generation. s ancestorsset depth startdepthsets#ancestors takes at least 1 argumentN startdepths'ancestors expects an integer startdepthrnegative startdepthdepths"ancestors expects an integer depthnegative depthrrr)rrr$r getintegerrr'r(r)rrrrMs r* ancestorsrs q,(? @ @D Tq!GHHIII!!J   !K   q55"#9:: : 4 tH~q)N'O'O P P q55"1%6#7#788 8E  fd6lzY   r,s_firstancestorsc(t|||dSNTr)rr'r(r)s r*_firstancestorsrs dFA4 8 8 88r,ct}t|t||D]}t|D]}||}t |dkrndt |dkr!t jtd|d }| |||zS)zAChangesets that are the Nth child of a changeset in set. rrs'revision in set has more than one child) setr+rArangechildrenr[rr1rr0add) r'r(r)rMr#csr2ics r* _childrenspecrs B D+d++Q / /  q  AQ  ""A1vv{{1vvzz+@AA! AA FF1III B;r,ct|td}|dkrt|||| |St}|j}t |t ||D]}t|D]_} ||d}#tj $r/|| }Y\wxYw| |||zS)zg``set~n`` Changesets that are the Nth ancestor (first parents only) of a changeset in set. s~ expects a numberr)rrrrrQr+rAr parentrevsrWdirUnsupportedp1r0r) r'r(r)rMr#psclr2rs r* ancestorspecrs 1a-..//A1uuT61qb%888 B B D+d++Q / /q ' 'A 'MM!$$Q'( ' ' 'GJJLL$$&& ' q B;s?B;CCsauthor(string) ct|td}t|d\}}|fdd|fS)zAlias for ``user(string)``.sauthor requires a stringF casesensitivecJ|Sr6user)r)matcherr's r*rzauthor.. s''$q',,..))r,s condreprrr_substringmatcherfilter)r'r(r)rMkindpatternrs` @r*authorrsh !Q23344A.qFFFD'7 ==)))))\14E   r,sbisect(string)ct|td}tt j||}||zS)a Changesets marked in the specified bisect status: - ``good``, ``bad``, ``skip``: csets explicitly marked as good/bad/skip - ``goods``, ``bads`` : csets topologically good/bad - ``range`` : csets taking part in the bisection - ``pruned`` : csets that are goods, bads or skipped - ``untested`` : csets whose fate is yet unknown - ``ignored`` : csets ignored due to DAG topology - ``current`` : the cset currently being bisected sbisect requires a string)rrlowerrrget)r'r(r)statusstates r*bisectr$sKq!788 9 9 ? ? A AF  D&)) * *E E>r,sbisectedc$t|||Sr6)rrs r*bisectedr8s $ " ""r,sbookmark([name])cnt|ddtd}|r^t|dtd}tj|\}}}t }|dkr||krj|}j|d} | s$tj td|z| |  nt } j D]%\} } || r| | &| D]/} | |  0n%fdjD}|thz}||zS) z{The named bookmark or all bookmarks. Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. rrs"bookmark takes one or no argumentss)the argument to bookmark must be a stringliteralNsbookmark '%s' does not existcDh|]}|Srr0r}r2r's r* zbookmark..^s%???tAw{{}}???r,)getargsrrr stringmatcherr _bookmarks expandnamerrr1rr0rvaluesr) r'r(r)rbmr rrbmsbmrev matchrevsnames ` r*bookmarkr(=s 1aACDD E ED @  G : ; ;   ",!9"!=!=gwee :  W}}/44W==O''66E +566@ GGDKOO%% & & & &I#4466 ) ) e74==)MM%(((" + +U ))**** +@???do&<&<&>&>???G9C C<r,sbranch(string or set)c j fd t|dtj\}} |dkr~|r| fddfSdr$tj td|zn2| fd dfS#tj $rYnwxYwtt|}t|D] } |!|j| fd fd S) z All changesets belonging to the given branch or the branches of the given changesets. Pattern matching is supported for `string`. See :hg:`help revisions.patterns`. c |dS#tj$r|cYSwxYwrP)rrbranch)r2getbir's r* getbranchzbranch..getbranchnsR $588A; $ $ $ $7>>## # # # $s)AAr,rc,|Sr6rr2r-rs r*rzbranch..sggiill33r, rsliteral:sbranch '%s' does not existc,|Sr6rr/s r*rzbranch..s''))A,,//r,c4|p |vSr6r)r2rrrr-s r*rzbranch..s!!!A$$+))A,,!+r,c(dtzS)Nr0r;)rrsr*rzbranch..s(1++5r,)revbranchcache branchinforrr branchmap hasbranchr  startswithrr1rr$r+rArr __contains__) r'r(r)r rrr2rrrr,r-rs ` @@@@@r*r+r+cs    ! ! ,E$$$$$$  a   ",!9!!  ==/////>1:M! %       , t[&&**A A  iill A ==++++++5555   sC00DDsphasedivergent()ctt|ddtdtj|d}||zS)zMutable changesets marked as successors of public changesets. Only non-public and non-obsolete changesets can be `phasedivergent`. (EXPERIMENTAL) rs!phasedivergent takes no argumentsphasedivergentrrobsmodgetrevs)r'r(r)phasedivergents r*r@r@s> Aq!Q;<<===^D*;<z/checkstatus..matches..s+//qqtt//////r,Tc3.K|]}|VdSr6rrKs r*rLz/checkstatus..matches..s+''A11Q44''''''r,) matchmodrrootgetcwdanypatsr[filesanyrrrnode) r)rfnamerRrLfieldhassetmcacherr's @r*matcheszcheckstatus..matchessw Gay OF O ty$++--#ANNNF1I 1I}}}yy{{ !s17799~~22GGIIaLE  AGGII%%u&////QWWYY///// u ADDFFKKMM16688<r)rNpatkindr rsysbytes)r'r(rrVrYrWrXs` `` @@r*rrs c " "f ,FVF0 ==,h.?.F.FL   r,cJ|stSt}|jj}|}|D]T}||kr ||\}}||vr|||t kr||vr||Ut|Sr6)rBrrQrrrr) r'r( parentsetrprminrevr2rp2s r* _childrenras yy B  "B ]]__F  ;; AB ?? FF1III ==R9__ FF1III 2;;r,s children(set)cjt|t||}t|||}||zS)z&Child changesets of changesets in set.)r+rAra)r'r(r)rrs r*rrs8 t[&&**A 4 # #B B;r,sclosed()cvt|ddtd|fddS)zChangeset is closed.rsclosed takes no argumentsc8|Sr6) closesbranchr2r's r*rzclosed..s$q'&&((r,sr)rrr rs` r*closedrgsL Aq!Q344555 ==((((3E   r,s_commonancestorheads(set)ct|t||t}|jjt |}|t |zS)Nr)r+rArcrQ_commonancestorsheadslistrB)r'r(r) startrevsancss r*_commonancestorheadsrmsJt[..BBBI /4> /i AD GDMM !!r,scommonancestors(set)ct|t||t}|stS|D](}|t j|t|gz})|S)z8Changesets that are ancestors of every changeset in set.r)r+rArcrBr r)r'r(r)rkr2s r*commonancestorsrosit[..BBBI yy 99%$T7A3<<888 Mr,sconflictlocal()cHt|ddtdddlm}|j|}|rB|j|jr#||j |jhzStS)zThe local side of the merge, if currently in an unresolved merge. "merge" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'. rs conflictlocal takes no argumentsr mergestate) rrrrreadactiverQhasnodelocalr0rBr'r(r) mergestatemodrrs r* conflictlocalrz  Aq!Q:;;<<<------)..t44J?t~55j6FGG?++J,<==>>> 99r,sconflictother()cHt|ddtdddlm}|j|}|rB|j|jr#||j |jhzStS)zThe other side of the merge, if currently in an unresolved merge. "merge" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'. rs conflictother takes no argumentsrrq) rrrsrrrtrurQrvotherr0rBrxs r* conflictotherr~"r{r,scontains(pattern)d)rc~t|tdfd}||dfS)a<The revision's manifest contains a file matching pattern (but might not modify it). See :hg:`help patterns` for information about file patterns. The pattern without explicit kind like ``glob:`` is expected to be relative to the current directory and match against a file exactly for efficiency. scontains requires a patternc^tjs:tjj}||vrdSn]|}tjjg|}|D]}||rdSdS)NTrHF)rNrZr canonpathrOrPrmanifest)r)patsrrLrrr's r*rYzcontains..matches>s$$ %diDDDtAwtQAty$++--#AFFFAZZ\\  1Q44 44 ur,s r)rrr )r'r(r)rYrs` @r*containsr2sZ Aq788 9 9C       ==,._matchvalue^sLa$$%8$??T!Msd{'Lf6G6G6L6LMr,c|Sr6rr2rs r*rzconverted..c++a..r,sr)rrrr )r'r(r)lrr0s` @@r* convertedrNs C1aABBCCAC!a @AABBNNNNNN ==    ,=s+C   r,sdate(interval)ct|td}tj||fdd|fS)z5Changesets within the interval, see :hg:`help dates`.sdate requires a stringcV|dSrPdate)r)dmr's r*rzdate..ns"""T!W\\^^A&''r,s r)rrr matchdater )r'r(r)dsrs` @r*rrgs_ 1a122 3 3B  B  B =='''''<2D   r,s desc(string)ct|td}t|d\}}|fdd|fS)zSearch commit message for string. The match is case-insensitive. Pattern matching is supported for `string`. See :hg:`help revisions.patterns`. sdesc requires a stringFrcJ|Sr6 description)r2rr's r*rzdesc..s!''$q'--//00r,s rr )r'r(r)rr rrs` @r*descrrsh 1a122 3 3B.rGGGD'7 ==00000L";M   r,ct|t||}|stStj|||||}||zSr6)r+rArBr r)r'r(r)rrrrootsrs r* _descendantsrsQ 4T**A . .E yy T5+z9MMA A:r,sdescendants(set[, depth])ct|dd}d|vr!tjtddx}}d|vr2t |dd}|dkrtjd |}d |vrOt |d td }|dkr!tjtd |d z}t |||d||S)zChangesets which are descendants of changesets in set, including the given changesets themselves. If depth is specified, the result only includes changesets up to the specified generation. s descendantsrrs%descendants takes at least 1 argumentNrs)descendants expects an integer startdepthrrrs$descendants expects an integer depthrrr)rrr$rrrrs r* descendantsrs  q.*A B BD Tq!IJJKKK!!J   !M   q55"#9:: : 4  NAEFF   q55"1%6#7#788 8E  fd6lzY   r,s_firstdescendantsc(t|||dSr)rrs r*_firstdescendantsrs faT : : ::r,sdestination([set])c|t|t||}nt|}t|D]m}t||}d}|W|t }||||vs|vr|n|}t||}|Wn|jfdS)zChangesets that were created by a graft, transplant or rebase operation, with the given revisions specified as the source. Omitting the optional set is the same as passing all(). Nc(dtzS)Nsr4)destssr*rzdestination..s,x>r,r) r+rArr4rjappendupdater r:)r'r(r)sourcesr2srclineagers @r* destinationrs  }{400!44d## EEE))D!$$o&& NN1   g~~ W%%%Aa((C#o& == >>>>   r,sdiffcontains(pattern)nc t|dd}d|vr!tjtdt |dtd}t j|tj}tj fdtj |j ||d  fd}||d |f S) zSearch revision differences for when the pattern was added or removed. The pattern may be a substring literal or a regular expression. See :hg:`help revisions.patterns`. s diffcontainsspatterns&diffcontains takes at least 1 arguments&diffcontains requires a string patterncSr6r)rIfmatchs r*makefilematcherz%diffcontains..makefilematchers r,T)diffcd}t|gD],\}}}}ttj||drd}-|S)NFT) searchfilesrBrgrepmoddifflinestates)r0foundrrIpstatesstatesrsearchers r*testdiffzdiffcontains..testdiffsi(0(<(< SENNO) )    $BWfG*7F;;TBB  r,sr)rrr$rrrsubstringregexpreMrNalwaysr grepsearcheruir ) r'r(r)rrregexprrrrs @@@r* diffcontainsrs q/: 6 6Dq!JKKLLL Z!EFFG ' 6 6F _  F#DGT6EEEH ==-A7,K= L LLr,scontentdivergent()ctt|ddtdtj|d}||zS)zh Final successors of changesets with an alternative set of final successors. (EXPERIMENTAL) rs#contentdivergent takes no argumentscontentdivergentr=)r'r(r)contentdivergents r*rrs@ Aq!Q=>>???~d,?@@ $ $$r,sexpectsize(set[, size]))r takeorderct|dd}d}t|dz}d}d|vsd|vr!tjt dt |dt d t d ||\}}|dks|dkr!tjt d t |t||d| }||krIt||kst||kr#t d ||t|fz}n:||kr4t||kr!t d|t|fz}|rtj||tkr||zS||zS)aReturn the given revset if size matches the revset size. Abort if the revset doesn't expect given size. size can either be an integer range or an integer. For example, ``expectsize(0:1, 3:5)`` will abort as revset size is 2 and 2 is not between 3 and 5 inclusive.s expectsizesset sizerrr,ssizersinvalid set of argumentss6expectsize requires a size range or a positive integers"size range bounds must be integerss negative sizers8revset size mismatch. expected between %d and %d, got %ds)revset size mismatch. expected %d, got %d) rr[rr$rrr+rAr1rE) r'r(r)r#rminsizemaxsizeerrr0s r* expectsizers q- 5 5DG$ii!mG CdfD00q!<==>>>" W  CDD /00 GW{{gkkq!122333 {4(($v,e D D DC's3xx'11SXX5G5GKLL   HHP   G  CG 3 3<==  HHA   )#C((( |V|r,sextdata(source)ct|dd}t|dtd}t j||}|t |zS)z:Changesets in the specified extdata source. (EXPERIMENTAL)sextdatar.s(extdata takes at least 1 string argument)rrrrr extdatasourcerB)r'r(r)rrdatas r*extdatarHsd q*i 0 0D   566F  v . .D GDMM !!r,s extinct()ctt|ddtdtj|d}||zS)zBObsolete changesets with obsolete descendants only. (EXPERIMENTAL)rsextinct takes no argumentssextinctr=)r'r(r)extinctss r*extinctrVs= Aq!Q455666~dJ//H H r,sextra(label, [value])ct|dd}d|vr!tjtdt |dtddd|vr;t |dtdt j\}fd |fd d f S) zChangesets with the given label in the extra metadata, with the given optional value. Pattern matching is supported for `value`. See :hg:`help revisions.patterns`. sextras label valueslabelsextra takes at least 1 arguments(first argument to extra must be a stringNsvalues)second argument to extra must be a stringcj|}|vodup|Sr6)r/)r2r/r3rr'values r*rzextra.._matchvaluexs:Q ~J5D=#IGGE%L4I4IJr,c|Sr6rrs r*rzextra..}rr,sr)rrr$rrrrr ) r'r(r)rr rr3rrs ` @@@@r*r/r/_s q(N 3 3Dtq!CDDEEE  XEFF  E E4 NAJKK   *7>>eWKKKKKKKK ==    ,=ue+L   r,sfilelog(pattern)c.t|td}t}|j}t j|s1t j|j| |}|g}nJt j |j| |g|dfd|dD}|D]K}| |}i} d} t|D]} | | } | | vr|| | 8|| } | |vr|| g| t!| | dz}d} ||D]}|||vrq|||vrZ |||}|| vr$|| kr|||} n|| |<u#t*j$rYwxYw M||zS)aChangesets connected to the specified filelog. For performance reasons, visits only revisions mentioned in the file-level filelog, rather than filtering through all changesets (much faster, but doesn't include deletes or duplicate changes). For a slower, more accurate result, use ``file()``. The pattern without explicit kind like ``glob:`` is expected to be relative to the current directory and match against a file exactly for efficiency. sfilelog requires a patternNrHc32K|]}| |VdSr6rrKs r*rLzfilelog..s0//q!!A$$///////r,rr)rrrrQrNrZrrrOrPrfilerjrTrlinkrevrrrevision readfilesfilenoderManifestLookupError)r'r(r)rrrrrRflknownscanposfrrlrstartr2rMrLs @r*filelogrs- Aq677 8 8C A B  C 0  ty$++-- = = N49dkkmmcUT K K K////DJ/// !%!% YYq\\r(( % %BBU{{eBi   BBRxxb $B((1,%%ABKKNN**qBLLOO/C/C % $Q 0 0 3 3A ~~#$77$%EE!HHH./G$)E/0E!H$8%%%$H%7 %> A:s4.s3OO1Q,,..OOOOOOr,)rr+rArrrNrrOrPextendrwalkr filerevancestorsrBr0r) r'r(r)r'rrrfctxsr2mctxrLrrIs @r*_followrso q$ 0 1 1D DddK--tK/@AA$ d7mQ'?%@%@4%G H H <6D P PAa C$y4j 4;;==1#4A LLOOOO 8K8KA8N8NOOO O O O O  "5+ 6 6 <DJNN,,-..D  tT; 7 7 A:r,sfollow([file[, startrev]])c&t|||dS)z An alias for ``::.`` (ancestors of the working directory's first parent). If file pattern is specified, the histories of files matching given pattern in the revision given by startrev are followed, including copies. r!rrs r*followrs 4I . ..r, _followfirstc*t|||ddS)NrTrrrs r* _followfirstrs 4O F F FFr,s?followlines(file, fromline:toline[, startrev=., descend=False])c t|dd}t|ddkr!tjt dd}d|vrlt |t ||d}t|dkr!tjt d|}t|d t d }t d }tj ||||}tj t|dd t d t d\} } |||} d} d|vr#t|dt d} | r0t!dt#j| | | Dd} n/t!dt#j| | | Dd} || zS)aChangesets modifying `file` in line range ('fromline', 'toline'). Line range corresponds to 'file' content at 'startrev' and should hence be consistent with file size. If startrev is not specified, working directory's parent is used. By default, ancestors of 'startrev' are returned. If 'descend' is True, descendants of 'startrev' are returned though renames are (currently) not followed in this direction. s followlinessfile *lines startrev descendslinesrs!followlines requires a line rangerrs(followlines expects exactly one revisionrsfollowlines requires a patterns$followlines expects exactly one filers,followlines expects a line number or a ranges"line range bounds must be integersFsdescends"descend argument must be a booleanc3DK|]\}}|VdSr6rr}r _lineranges r*rLzfollowlines..(B  !Az      r,T)iterascc3DK|]\}}|VdSr6rrs r*rLzfollowlines..2rr,)rr[rr$rr+rArJrrparsefollowlinespatternrprocesslinerangerfilectx getboolean generatorsetr blockdescendantsblockancestors)r'r(r)rr0rrmsgrUfromlinetolinefctxdescendrss r* followlinesrs/ q.*I J JD 4>aq!EFFGGG CddK--tK/@AA t99>>"=>> iikk DM1%F#G#G H HC 3 4 4C  +D#sC @ @E,  N1  = > > 3 4 4   Hf 9  U # #DGT   3 4 4      %*%;(F&&         %*%9(F&&        B;r,snodefromfile(path)ct|td}t} tj|d5}|D]=}|}t ||}|||> dddn #1swxYwYnS#t$rF} td} | |tj | j fz} tj | d} ~ wwxYw|t|zS)zRead a list of nodes from the file at `path`. This applies `id(LINE)` to each line of the file. This is useful when the amount of nodes you need to specify gets too large for the command line. s nodefromfile require a file pathrbNscannot open nodes file "%s": %s)rrrropenstrip_noderIOErrorr strtolocalstrerrorrrDrB) r'r(r)path listed_revrlinerMrnexcrLs r* nodefromfiler=sC Q=>> ? ?DJ  ]4 & & '! ' 'JJLL4^^>NN2&&&  ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '  0 1 1 dH' 55 66k!nn GJ'' ''s=BAB BBBBB C,&AC''C,sall()cdt|ddtd|t|zS)z&All changesets, the same as ``0:tip``.rsall takes no arguments)rrrZrs r*getallrVs2 Aq!Q011222 GDMM !!r,s grep(regex)cJ tjt|tdnM#tj$r;}t jtdt j|zd}~wwxYwfd}||dj fS)zLike ``keyword(string)`` but accepts a regex. Use ``grep(r'...')`` to ensure special escape characters are handled correctly. Unlike ``keyword(string)``, the match is case-sensitive. sgrep requires a stringsinvalid match pattern: %sNc|}|||gzD]}|rdSdSNTF)rRrrsearch)r)regrr's r*rYzgrep..matchesls` Gaffhh 88  Ayy|| tt ur,s r) rcompilerrrr$r forcebytestrr r)r'r(r)r#rYr$s` @r*rr^s  Z !Q'@%A%ABB C C 8    * + +j.Ea.H.H H     ==L"*+E= F FFs/4A>6A99A>s _matchfilesc  t|ddd}gggc d\ |D]}t|d}|dd|dd}}|dkr|B|dkr |^|d kr |z|d kr'tjd |d krt ||d kr tjd| tjd|z sd t d z zD dgjj f d}| |d fS)Nrs*_matchfiles requires at least one argumentrs%_matchfiles requires string argumentsrnp:si:sx:sr:s)_matchfiles expected at most one revisionr,sd:s-_matchfiles expected at most one default modesinvalid _matchfiles prefix: %ssglobc3FK|]}tj|dkVdS)rN)rNrZr}rps r*rLz_matchfiles..s2II1!!$$.IIIIIIr,c : |tkr |}n |} drrC A |n }tj j   | d< d}|D]}||rdSdS)Nr)includeexcluderIrTF)r rRrNrrOrP)r)rRr2rLrrrgetfilesrWincrXrr'r0s r*rYz_matchfiles..matchess <<GMMOOEEHQKKEay V  [cA   GF1I 1I  Aqtt tt ur,sCr) rrrrr$r rSrQrr )r'r(r)rargrprefixrrYrrr/rWr0rXrr0s` @@@@@@@@r* _matchfilesr3vs 1bGHHARND#sLCOO cC D D"1"qu U?? KK     u__ JJu     u__ JJu     u__&@|| u__"&DGG"#Dv#MNN N  IIs S8HIII I IFVF~'H0 == /          r,s file(pattern)cht|td}t||dd|zfS)zChangesets affecting files matched by pattern. For a faster but less accurate result, consider using ``filelog()`` instead. This predicate uses ``glob:`` as the default kind of pattern. sfile requires a patternstringr))rrr3rs r*hasfiler6s7 Aq344 5 5C tVi%= > >>r,shead()c$t|ddtdt}|j|D]#}|fd|D$|t|zS)z!Changeset is a named branch head.rshead takes no argumentsc3BK|]}|VdSr6r)r}hrs r*rLzhead..s-(("&&))((((((r,)rrrrQr7 iterheadsrrB)r'r(r)hslsrs @r*headr=s Aq!Q122333 B Bnn((**)) ((((R((((((( GBKK r,s heads(set)c|tkrt}t|t|||}d}t|vrMd|dD}t |}|t|j |}|/| || tt|}||zS)z'Members of set with no children in set.rNc6g|]}|Srrr+s r*r~zheads..s ===1quuww===r,) r\rEr+rAr parentsrdiscardrQheadrevsdifference_updaterrB)r'r(r)r#inputset wdirparentsrs r*rrs dK--q>>>HK(==T (:(:(<(<=== x==!!! N # #H - -E  ,,, ' ENNE E>r,shidden()ctt|ddtdtj|d}||zS)zHidden changesets.rshidden takes no argumentssvisible)rrr filterrevs)r'r(r) hiddenrevss r*hiddenrIs> Aq!Q344555$T:66J J r,skeyword(string)ctjt|tdfd}||dfS)zSearch commit message, user name, and names of changed files for string. The match is case-insensitive. For a regular expression or case sensitive search of these fields, use ``grep(regex)``. skeyword requires a stringc|}tfd|||gzDS)Nc3DK|]}tj|vVdSr6r r)r}tkws r*rLz+keyword..matches..sF   (.## #      r,)rSrRrr)r2rrOr's r*rYzkeyword..matchessf G    WWYY!&&((AMMOO!<<      r,s r)r rrrr )r'r(r)rYrOs` @r*keywordrP sc  !Q'C%D%DEE F FB       ==OR+@= A AAr,slimit(set[, n[, offset]])ct|dd}d|vr!tjtdt |dtdd}|d kr!tjtd t |d tdd }|d kr!tjtd t |t||d}||||z}|tkr |dkr||zS||zS) z>First n members of set, defaulting to 1, starting from offset.rs set n offsetrs%limit requires one to three argumentsnslimit expects a numberr)rrnegative number to selectsoffsetsnegative offset) rrr$rrrr+rAslicerE) r'r(r)r#rlimofsosr<s r*rrs4 q(O 4 4D Tq!IJJKKK TXXd^^Q'@%A%A1 M M MC Qwwq!=>>???  Q8991   C Qwwq!344555 k$''f 6 6B #sSy ! !B a{ ;r,slast(set, [n])ct|ddtd}d}t|dkr#t|dtd}|dkr!t jtdt |t||d}|| d|}|tkr |dkr||zS|||zS)z'Last n members of set, defaulting to 1.rrns"last requires one or two argumentsslast expects a numberrrS) rrr[rrr$r+rAreverserTrE)r'r(r)r#rrUrWr<s r*rJrJ6s 1a@AABBA C 1vv{{1q!9::;; Qwwq!=>>??? k$''1 . .BJJLLL !S  B a{JJLLL ;r,smax(set)ct|t||} |}||vrt|gd||fSn#t$rYnwxYwtd||fS)z.Changeset with highest revision number in set.s datarepr)r+rArrB ValueErrorr'r(r)rWrLs r*maxrevr_J k$'' + +B FFHH ;;A3/62)FGGG G        _fb9 : : ::,A AAsmerge()ct|ddtdjfd}||dS)zChangeset is a merge changeset.rsmerge takes no argumentsc |dtkS#tj$r*t |cYSwxYwrY)rrrrboolr`)r2rr's r*ismergezmerge..ismerge`sb &==##A&'1 1$ & & &Q %% % % % &s#'6A A sr)rrrQr )r'r(r)rers` @r*mergerfYs` Aq!Q233444 B&&&&&& ==:= 6 66r,s branchpoint()ct|ddtd|j}|stSt |dgt |z z|dzD]3}||D]}|kr|z xxdz cc<4|fddS)z$Changesets with more than one child.rsbranchpoint takes no argumentsr)rc"|z dkSrYr)r2baserev parentscounts r*rzbranchpoint..zs,q7{+a/r,s r) rrrQrBrr[rrr )r'r(r)rr2rprirjs @@r* branchpointrkis Aq!Q899::: B yy&kkG3#d))g-.L WW7Q;W ' '//q!! / /AG||Q[)))Q.))) / ==/////:J   r,smin(set)ct|t||} |}||vrt|gd||fSn#t$rYnwxYwtd||fS)z-Changeset with lowest revision number in set.s r[)r+rArrBr]r^s r*r_r_~r`rasmodifies(pattern)c`t|td}t|||dS)zChangesets modifying files matched by pattern. The pattern without explicit kind like ``glob:`` is expected to be relative to the current directory and match against a file or a directory. smodifies requires a patternmodifiedrrs r*modifiesros0 Aq788 9 9C tVS* 5 55r,snamed(namespace)c t|ddtd}t|dtd}tj|\}}}t }|dkrN|jvr$tjtd|z| j|n?j D]%\} }|| r| |&t } |D]X}| D]@} | |j vr5| fd|| DAY| thz} || zS)zThe changesets in a given namespace. Pattern matching is supported for `namespace`. See :hg:`help revisions.patterns`. rs#named requires a namespace argumentrs&the argument to named must be a stringrsnamespace '%s' does not existc3LK|]}|VdSr6r)r}rMr's r*rLznamed..s/IIqT!W[[]]IIIIIIr,)rrrrrrnamesrr1rr listnames deprecatedrnodesr) r'r(r)rnsr rr namespacesr'rrs ` r*namedrxs 1aADEE F FD  Q 344  B (5b99D'7J z $* $ $'233b8  tz'*++++ ((** # #HD"wt}} #r""" EEEJJLL&& J JD2=(( IIIIBHHT44H4HIIIIII J gYE E>r,cd}t|d|jjzkr^ |jt |}n#t j$r t}Ynwtj tf$rd}Yn^wxYw tj ||}||j|}n'#t$rYnt j$r t}YnwxYw|S)zprocess a node inputNrn)r[ nodeconstantsnodelenrQr0rrrr binasciiError LookupErrorrresolvehexnodeidprefix)r'rMrpms r*rrs B 1vvT'//// ##CFF++BB$   BBB ,   BBB  /a88B~^''++    D$   BBB  Is/'A A>$A>=A>1B44 CCCs id(string)ct|ddtd}t|dtd}t||}|t St |g}||zS)zBRevision non-ambiguously specified by the given hex string prefix.rsid requires one argumentrsid requires a string)rrrrrB)r'r(r)rrMrresults r*node_rso 1a67788A!A$12233A tQB zyy bT]]F F?r,snone()c\t|ddtdtS)zNo changesets.rsnone takes no arguments)rrrBrs r*noners+ Aq!Q122333 99r,s obsolete()ctt|ddtdtj|d}||zS)z6Mutable changeset with a newer version. (EXPERIMENTAL)rsobsolete takes no argumentssobsoleter=)r'r(r) obsoletess r*rrs= Aq!Q566777t[11I I r,sonly(set, [set])c|j}t|ddtd}t|t ||dt |dkrUst Sttj |dfd| D}n$t|t ||d}t| |}||zS)aChangesets that are ancestors of the first set that are not ancestors of any other head in the repo. If a second set is specified, the result is ancestors of the first set that are not ancestors of the second set (i.e. :: - ::). rrnsonly takes one or two argumentsrFc$g|] }|v|v | Srr)r}r0rr-s r*r~zonly..s4   +%%cWnn .._firstsrc"sDD#&& ;4  s++D| C  r,c&h|] }|Srr)r}r2rs r*rzorigin...s!%%%!1%%%r,)r+rA)r'r(r)rors` @r*originrs~ }t[..22D!!      &%%%u%%%A$KA A:r,soutgoing([path])cddlm}m}t|ddt d}|r#t |dt dpd}|r|g}ng}t }tjj |D]} | j p| j }| j gf} | | g\} } | rfd| D} |i|} j 5|| | }d d d n #1swxYwY| n#| wxYw||jjfd |D}||zS) zChangesets not found in the specified destination repository, or the default push location. If the location resolve to multiple repositories, the union of all outgoing changeset will be used. r) discoveryhgrs"outgoing takes one or no argumentss#outgoing requires a repository pathr,c:g|]}|Srlookup)r}r0r's r*r~zoutgoing..Ts%555DKK$$555r,) onlyheadsNc:h|]}|Srrr}r2rs r*rzoutgoing.._s#$$$q$$$r,)rsrrrrrrr get_push_pathsrpushloclocr+ addbranchrevspeersilentfindcommonoutgoingclosermissingrQ)r'r(r)rrrdestrrrbranchesrcheckoutr}outgoingrrs` @r*rr5s 1a@AABBA Hi!a FGGHHOC  eeG&tTWe<<))|'tx;?))$hCCh  65555555Db$'' !!  $77%48                KKMMMMEKKMMMMx'(((( B$$$$G$$$A A:s0D<7D D<D D<#D $D<<Es p1([set])c>|S||}|dkr|t|gzStSt}|j}t |t ||D]} |||d2#tj $rB|||YwxYw|thz}||zS)z.s 1 1 1!aeegg 1 1 1r,c3>K|]}|VdSr6rr+s r*rLzparents..s*66q15577666666r,) r@rrQrrr+rArrr)r'r(r)rruprr2s r*r@r@s  y 1 1tAw00 1 1 1 UU ^ Y] k$//33 7 7A 7::a==!!!!( 7 7 766DGOO$5$566666666 77)OB B;s,B phases) _phasecache getrevset)r'r(targetss r*_phasers   % %dGV < <>++,,, - B;s0 #3A2.C!!AD21D26AE88A)G%$G%s present(set)cn t||||S#tj$rtcYSwxYw)aAn empty set, if any revision in set isn't found; otherwise, all revisions in set. If any of specified revisions is not present in the local repository, the query is normally aborted. But this predicate allows the query to continue even in such cases. )r+rr1rBr&s r*presentrsIdFAu---  yys 44 _notpubliccrt|dddt||tjtjS)Nrs_notpublic takes no arguments)rrrrrrs r* _notpublicrs/ Aq!5666 $ fm < <.cutfunc*sxc""\11r,)rrc$|kSr6r)r2rrr's r*rz$_phaseandancestors..0sXXdA%6%6%%?r,)rrr+rArrrrr$rrr rr ) r'r(r)r phasenamerr phasenamemaprrrrrs ` @@@r*_phaseandancestorsrs 1aH I ID$q'""It[&&Q00A LE ]FL  $$= IJJJ *L%H2222222  dAw 7 7 7DH{{??????@@ D=r,spublic()cvt|ddtdt||tjS)zChangeset in public phase.rspublic takes no arguments)rrrrpublicrs r*rr4s5 Aq!Q344555 $ . ..r,sremote([id [,path]])cddlm}t|ddtd}d}t |dkr#t |dtd}|dkr|d}d}t |dkr#t |dtd }|sd }tjd ||j |\}}| |i|}| |} | |vr.||  } | |vrt| gStS) zLocal revision that corresponds to the given identifier in a remote repository, if present. Here, the '.' identifier is a synonym for the current local branch. r)rrrns(remote takes zero, one, or two argumentsrsremote requires a string idr,s!remote requires a repository pathsdefaultsremote)rsrrrr[rr+r get_unique_pull_pathrrrr0rB) r'r(r)rrqrrr}rMr2s r*remoter<sA 1aFGGHHA A 1vvzz adA<== > >Dyy J     D 1vvzz1q!EFFGG 14$ND( GGD"d # #E QADyy GKKMM ;;A3<<  99r,sremoves(pattern)c`t|td}t|||dS)zChangesets which remove files matching pattern. The pattern without explicit kind like ``glob:`` is expected to be relative to the current directory and match against a file or a directory. sremoves requires a patternremovedrrs r*removesrbs0 Aq677 8 8C tVS) 4 44r,s rev(number)cl t|||S#tj$rtcYSwxYw)z+Revision with the given numeric identifier.)_revrr1rBrs r*r0r0osGD&!$$$  yys 33s _rev(number)ct|ddtd} tt|dtd}n6#tt f$r"t jtdwxYw|tvrN |j |n2#t$r%t j td|zwxYw|t|gzS)Nrsrev requires one argumentrsrev requires a numbersrev expects a numbersunknown revision '%d')rrrrrr]rr$r?rQrTrr1rB)r'r(r)rs r*rrxs 1a78899A;  !A$": ; ;<< = = z ";;;q!899:::;  I N   " " " " I I I'*B(C(Ca(GHH H I GQCLL  s0A3BB--/Cs revset(set)c&t||||S)aStrictly interpret the content as a revset. The content of this special predicate will be strictly interpreted as a revset. For example, ``revset(id(0))`` will be interpreted as "id(0)" without possible ambiguity with a "id(0)" bookmark or tag. )r+r&s r*revsetpredicaters $5 ) ))r,smatching(revision [, field])c  t|ddtd}tt|ddg}t |dkr5t |dtd}g}|D];}|dkr|gdz }|dkr|d dgz }|d krd }||.fieldkeyfuncsI ###A&& & # # #z?? " " " #s 44)keyc8|Sr6rrfs r*rzmatching..47<<>>r,c8|Sr6r+rfs r*rzmatching..sT!W^^--r,c8|Sr6rrfs r*rzmatching..rr,c8|Sr6rrfs r*rzmatching..s$q'"5"5"7"7r,c8|Sr6)rRrfs r*rzmatching..DGMMOOr,c8|Sr6)r@rfs r*rzmatching..sd1goo//r,c8|Sr6)rrfs r*rzmatching..rr,c|jSr6)substaterfs r*rzmatching..stAw/r,ch|dSrP)r splitlinesrfs r*rzmatching..s(d1g1133>>@@Cr,c t|tjjddiS)NsgitT)r)rjrr diffalloptsrrfs r*rzmatching..s94 GLLh247VTNKKL L L  r,) rrrrrrrrrrNs,unexpected field name passed to matching: %sc"fdDS)Nc&g|] }|Srr)r}rr2s r*r~z.matching.... s!555!1555r,r)r2 getfieldfuncss`r*rzmatching.. s5555}555r,cD]@}|}d}tD]\}}||||krd}|rdSAdSr!) enumerate) r)r0rrrMrr getinfors r*rYzmatching..matches su  CWS\\FE!-00 " "1!9!$$!E tt ur,sr)rrr+rAr[rsplitrrrArjsortrrr$r )r'r(r)r fieldlistfieldsrVr_funcsinfogetfieldrYrr r rs` @@@@r*matchingrs4 1a=>>??A $ D))1Q4 0 0D I 1vvzz aD B C C   %'' F ! ! K   888 8FF g   x) )FF !! MM% [[FV& 8 8z"""   J#####&\\F KKLK!!!M))))----))))7777++++////++++////CCCC      F''::dD))  "ABB  X&&&&6555G        ==,>+M= N NNr,s reverse(set)cht||||}|tkr||S)zReverse order of set.)r+r\rY)r'r(r)r#rs r*rYrY s4 tVQ&&A  Hr,s roots(set)ctt|jjfd}||dzS)z2Changesets in set with no parent changeset in set.c |D]}d|kr|vrdSnL#tj$r:dD]}|vrYdSYnwxYwdS)NrFT)rrr@r0)r2rpr@r'rs r*r zroots..filter' s !WQZZ ! !66a1ff 55 !$ ! ! !$Z'')) ! !5577a<< 555  ! ! !tsAA($A('A(sr)r+rArQrr )r'r(r)r r@rs` @@r*rr! sj t[&&**An'G        AHHVjH99 99r,icB|ttSr6)randintMININTMAXINT)rgens r* pick_randomr9 s ;;vv & &&r,c*|Sr6rrs r*rr@ sr,c*|Sr6rr s r*rrA sq}}r,c*|Sr6rr s r*rrB sqvvxxr,c*|Sr6rr s r*rrC sr,c6|dSrPrr s r*rrD sqvvxx{r,)revrsdescrrrsnoderandomc t|dd}d|vr!tjtdd}d|vr#t |dtd}g}|D]}|}|d}|r |d d }|tvr<|d kr6tjtd tj |z| ||ft|d kr:td |Dr!tjtdi}d|vrFtd|Dr |d|d<n!tjtdd|vretd|Dr+|d}t |td} | |d<n!tjtd|d||fS)z5Parse sort options into (set, [(key, reverse)], opts)ssorts%set keys topo.firstbranch random.seedrs"sort requires one or two argumentsr%skeysssort spec must be a string-rNtoposunknown sort key %rc3(K|] \}}|dkVdSr)Nrr}rrYs r*rLz_getsortargs..e s* I I*!Wg I I I I I Ir,s7topo sort order cannot be combined with other sort keystopo.firstbranchc3(K|] \}}|dkVdSr+rr,s r*rLz_getsortargs..m s*77 7qG|777777r,s>topo.firstbranch can only be used when using the topo sort key random.seedc3(K|] \}}|dkVdS)r&Nrr,s r*rLz_getsortargs..y s*99*!WqI~999999r,srandom.seed must be a strings;random.seed can only be used when using the random sort key) rrr$rrrr9 _sortkeyfuncsrbytestrrr[rS) r)rrkeyflagsrfkrYrrseeds r* _getsortargsr6J sd  0  D Tq!FGGHHH D$g*G(H(HIIH ZZ\\ & & ,,t$$  !""A M ! !a7ll"())H,.parentsfunc.. s BBBAEEGGBBBr,)rrr@)r2rr's r* parentsfunczsort..parentsfunc scC%:a==(,CCCBBT$Z-?-?-A-ABBBBBBCs 3AAr-T)istopoc g|] }| Srrrs r*r~zsort.. s " " "DG " " "r,r&r/)r)rrYc6g|]}|Srr)r}rs r*r~zsort.. s ***AEEGG***r,)r6r+r\r[rrQrr rBr toposortrYreversedr1randomRandom functoolspartial)r'r(r)r#rr3rr firstbranchr:ctxsrrYrr5r2rs` @r*rr s2%QAx $5 ) )D u ++  8}}hqk!n66 (1+a. ))) !Q7 " " ^.  d?? C C C C C C $ & & vt4G/HIIK N4k : :    A;q>  LLNNN  # " " "T " " "Dx((-- 7Q >>n44'D d##A$Tq111D dG ,,,, **T*** + ++r,ssubrepo([pattern])c.t|ddtd}dt|dkr#t|dtdt jdgfdfd}||d f S) zChangesets that add, modify or remove the given subrepo. If no subrepo pattern is named, any subrepo changes are returned. rrs"subrepo takes at most one argumentNssubrepo requires a patterns .hgsubstatec3dKtj\}}}|D]}||r|VdSr6)rr)rrrrprLr'rs r* submatcheszsubrepo..submatches sP*3//1a  Dqww    r,cf|}||}|jp |jp|jS|jr/t |jS|jrt|j}| |j|D]M}|j ||j |krdSN|jrAt |jSdS)N)rTF) rrrTrrnrrSrrrrr) r)rrsubsrrLrr'rHs r*rYzsubrepo..matches se G KK qvvxxqK 9 9 ;75aj5AI 5 7 6zz!*//"3"34455 5 : qttvv++--..D KK )) * * *" 4((  4466?&&t,, t0D0DDD44E 9 ;zz!$$&&/"6"6"8"899:: :ur,s r)rrr[rrNexactr )r'r(r)rrYrLrrHs` @@@r*subreporL s 1aACDD E ED C 4yyA~~Q#@!A!ABB'((A . ==OS+A= B BBr,c|j}|jj|jfd|fd|DD}|dt j||jjz S)z(repo, smartset, [node] -> [node]) -> smartset Helper method to map a smartset to another smartset given a function only talking about nodes. Handles converting between rev numbers and nodes, and filtering. c&h|] }|Srr)r}rMtorevs r*rz!_mapbynodefunc.. s! 8 8 81eeAhh 8 8 8r,c3.K|]}|VdSr6r)r}r2tonodes r*rLz!_mapbynodefunc.. s+!7!7&&))!7!7!7!7!7!7r,N) unfilteredrQrget_revrTrArrB filteredrevs)r'rrrrrQrOs @@r*_mapbynodefuncrU s    $B H E WF 8 8 8 8!7!7!7!7Q!7!7!7 7 7 8 8 8F NN4  FT^%@@ A AAr,ssuccessors(set)cvtt|}fd}t||}||zS)zNAll successors for set, including the given set themselves. (EXPERIMENTAL)c8tjj|Sr6)r allsuccessorsobsstore)rur's r*rzsuccessors.. sg+DM5AAr,)r+rArU)r'r(r)rrds` r* successorsr[ sG t[&&**AAAAAAtQ""A A:r,ctj|\}}|dkr!|stjfd}nfd}||fS)Nrrc0tj|vSr6rMrrs r*rz#_substringmatcher.. s8>!+<+< <r,c |vSr6rr^s r*rz#_substringmatcher.. s 1 r,)rrr r)rrr rs` r*r r  su'5}D'7 z -nW--G<<<.9 s4EEEtq!''!**EEEEr,cLh|] \}}|dk |!S)stipr)r}rNrMrs r*rztag..; s, B B B41aa6kkRVVAYYkkkr,) rrrQrrr _tagscachetagsrrr1r0tagslist) r'r(r)rrr tnrrrs @@r*tagrg s& 1aA>?? @ @D B C G 5 6 6   ",!9'!B!Bgw :  %))'488Bz+011G;b AAEEEEEt}}EEEAA B B B B4==?? B B B A:r,staggedc$t|||Sr6)rgrs r*taggedri? s tVQ  r,sorphan()ctt|ddtdtj|d}||zS)z?Non-obsolete changesets with obsolete ancestors. (EXPERIMENTAL)rsorphan takes no argumentsorphanr=)r'r(r)orphans r*rlrlD s< Aq!Q344555 ^D) , ,F F?r,s unstable()cVt|dddt}|tj|d|tj|d|tj|d|t |zS)z-Changesets with instabilities. (EXPERIMENTAL)rsunstable takes no argumentsrkr<r)rrrr>r?rB)r'r(r) _unstables r*unstableroM s Aq!3444I V^D)44555 V^D*;<<=== V^D*=>>??? GI&& &&r,s user(string)c$t|||S)zUser name contains string. The match is case-insensitive. Pattern matching is supported for `string`. See :hg:`help revisions.patterns`. )rrs r*rrY s $ " ""r,swdir()ct|ddtdt|vst|trt tgSt S)z!Working directory. (EXPERIMENTAL)rswdir takes no arguments)rrr r@rArBrs r*wdirrrc sU Aq!Q122333&Jv{;;y!!! 99r,ct|d}|stS|j}g}t}|dD]} t |}d|z|ks||vrt |g} n'#t $rt|||t} YnwxYw| D]S}||vr||vs|tvr*t|tr| || |Tt|S)Ninternal errors%d)rrBrQrrrr]rCr\r?r@rArr) r'r(r)rrr<seenrNr2rs r* _orderedlistrwm s4!&''A yy B B 55D WWU^^ ;AA a1B;;  3DD ; ; ;T61k::DDD ;  ADyyV  $$v{33% ! HHQKKKK  2;;s&A77!BBs_listc||tkr!|t|t||zSt|||Sr6)rErwrAr&s r*_listry s>  T;t+<+. s ) ) )Q#a&& ) ) )r,rucg|]}|v| Srrr}r2rs r*r~z#_orderedintlist.. ,,,!Q!VVAVVVr,)rrBr)r'r(r)r<rs @r*_orderedintlistr sj!&''A yy ) )!''%.. ) ) )BA ,,,,r,,, - --r,s_intlistc||tkr!|t|t||zSt|||Sr6)rErrAr&s r*_intlistr > k$.?.?CCCCtVQ///r,ct|dstS|jfddD}|tfd|DS)NrtcTg|]$}t|%Sr)r0rrs r*r~z#_orderedhexlist.. s) 1 1 1Q"&&Q.. 1 1 1r,rucg|]}|v| Srrr}s r*r~z#_orderedhexlist.. r~r,)rrBrQr)r'r(r)r<rrs @@r*_orderedhexlistr sx!&''A yy B 1 1 1 1!''%.. 1 1 1BA ,,,,r,,, - --r,s_hexlistc||tkr!|t|t||zSt|||Sr6)rErrAr&s r*_hexlistr rr,srangersrangepres rangepostsdagranger5ssymbolsands andsmallyorsnots differencesrelations relsubscripts subscriptlistskeyvalue)sfuncsancestorsparents parentpostssmartset)gs generationscfd}|S)Nc tj|S#tj$rtjd|zwxYw)Ns!ambiguous revision identifier: %s)r isrevsymbolrAmbiguousPrefixLookupError InputError)symbolr's r*rzlookupfn..fn sV &tV44 4/   "4v=  s'?r)r'rs` r*lookupfnr s# Ir,c(t||g|S)z+Create a matcher for a single revision specr)matchany)rspecrs r*rr s Bv . . ..r,c|sd d}|St|s!tjtdt |dkrt j|d}n ddtfd|Dzf}g}d}|r/|| d |j }|r'|| |rt j ||| }t j |}t j|}t j|}t!|S) aeCreate a matcher that will include any revisions matching one of the given specs If lookup function is not None, the parser will first attempt to handle old-style ranges, which may contain operator characters. If localalias is not None, it is a dict {name: definitionstring}. It takes precedence over [revsetalias] config section. NctSr6)rB)r'r(s r*mfunczmatchany..mfunc s 99 r,s empty queryrrr)rc3BK|]}tj|VdSr6)rparse)r}rrs r*rLzmatchany.. s0JJqz/6::JJJJJJr,s revsetalias)warnr6)allrr$rr[rrtupler configitemsrr expandaliases foldconcatanalyzeoptimize makematcher)rspecsr localaliasrtreealiasesrs ` r*rr sd      u::2q00111 5zzQa&11  JJJJEJJJJJ J  G D r~~n55666w+z''))***B'gDAAA   & &D  d # #D  t $ $D t  r,cdfd }|S)z)Create a matcher from an evaluatable treeNcp||t}nt}|t|}t|||Sr6)r\rErAr+)r'r(r#rs r*rzmakematcher..mfunc s? =~## > &&FdFD%000r,rr)rrs` r*rr s(111111 Lr,c|jD]0\}}|t|<|jrt|1dS)z2Load revset predicates from specified registrarobjN)_tablerr_safe safesymbolsr)rextname registrarobjr'rs r* loadpredicater, sT")//11"" d : " OOD ! ! !""r,)FNN)F)Tr6r)r|rBr@ri18nrrrrTrrr rsr r r r rrrrrrNrr>rrrrrrrrrrrutilsrrr rrrrrtrrrrBrrZrAr?rcr\rEr+r4r;rCrFrNrSrUrWrHr`rfrhrlrorurwrrrrrrrrrrrrr predicaterrrrrrrrrrrrr(r+r@rErrarrgrmrorzr~rrrrrrrrrrrrrr/rrIrrrrrrr3r6r=rrIrPrrJr_rfrkr_rorxrrrrrrrr`rr@rrrrrrrrrrrr0rrrYrrrrr=binnoder1r6rrLrUr[r rgrirlrorrrrwryrrrrr%rrrrrrr" i18nfunctionsrr,r*rs  ,    "  "  $  $  $  " ! P   #.<<<< >>>CCCJJJ ;;;&CCCCCCNNN333666 1 1 1!!!>=== < 1 1 1HHHMMM + + +,   cee %I % ' '  > =MMM  $r222 3 332 3  "c:::;:,DH  %D11121>  D)))99*)9 (*  433343  4((()(& ;T"""###"#  T***""+*"J  #$r:::00;:0f  T*** # #+* # ;T"""  #" """J"  $'''(' ;T"---.-  'd333 " "43 "  ".../.  D)))  *)   D)))  *)   ,,,DD-,D6  D)))*)0  433343 ?b111  21 "DH  'd33343B  d+++;;,+;   tB777,,87,^  #C000&M&M10&MR  t,,,%%-,%  %DDAAA((BA(V  E#666 " "76 " "%%%GG&%G. >%%%WW&%Wt  $r222 ? ?32 ? 94     !   =tt44454( ;T"""#"  D444BB54B(  'dd1MMMNM.  4488898& ;T""" ; ;#" ; :D!!! 7 7"! 7  $'''('( ;T""" ; ;#" ;  d2666 6 676 6  "" "J, =t$$$  %$  94   !  =t$$$%$  T***+*:  $'''('@  U2666**76*Z %%%((&%(  :D!!!(("!( ;T"""((#"(  $'''  (' D ?666  76  =t$$$==%$=   0t<<<=<< ;T"""//#"/  "///""0/"J  T"555 5 565 5 >%%%&% ?&&&!!'&!$ >555**65*  *666~O~O76~OB ?a@@@  A@  =t$$$::%$:&  1'''' N## & &  !! " " _   <(<(<(~ %DD=,=,=,@  !!)C)C"!)CX B B B  D)))*) " " " " >%%%&%> 94     !   ;T"""#" =t$$$''%$' ?b111##21# 94***+*B 8$$///--0/-... ;TT!<<<00=<0... ;TT22200320  h   )      y  y  F ,  5  F =  _ ,   W! "# $-   4 "   %   //// &&&&R    """ dD)$$$  r,