\x89\x50\x4E\x47\x0D\x0A\x1A\x0A PNG  \x89\x50\x4E\x47\x0D\x0A\x1A\x0A  13\c@@sddlmZddlZddlmZddlmZmZmZm Z m Z ddl m Z idddodpdfd 6ddddqdfd6ddddrdfd6ddddsdfd6ddddtdfd6ddddudfd6dddvdwdfd6dd dxdyd#fd$6dd dzd{d#fd%6d&d'd|d}d*fd+6d,dd~ddfd-6d,ddddfd.6dddddfd/6dddddfd06ddddd2fd36d4ddddfd56d4ddddfd66d4ddddfd76d8ddddfd:6d;ddddfd=6dd 6dd 6dd>6dd?6dd@6Zd/d5d-hZiZdAdBhZee jdCZee jejjdDejjdDdEeee je jdFdGBZeee jdHBZddddIZeZdJZ dKZ!edLZ"dMZ#dNZ$dOZ%dPZ&dQZ'iZ(dRZ)dSZ*dTZ+dUZ,dVZ-dWZ.dXZ/dYZ0dZZ1ed[hBZ2ddd\Z3d]ej4fd^YZ5dd_Z6d`Z7ddaZ8dbZ9dcZ:ddZ;deZ<ie;df6e<dg6Z=dhZ>diZ?djZ@dkZAe jBjCdlZDdmZEdnZFdS(i(tabsolute_importNi(t_(terrortnodetparsertpycompattutil(t stringutilitgroupt)tfunct(t subscriptt]t[trelationt#it_concats##itancestort~tparentt parentpostt^itnegateitminust-it dagrangeallt dagrangepretdagranget dagrangeposts::s..itrangealltrangepretranget rangepostt:i tnott!tandt&tonlytonlypostt%itort|t+itkeyvaluet=itlistt,tsymboltstringtendt"t's()[]#:=,-|&+!~^%tasciis._@iis-/c #@st|ts%tjd|ntj|}|dkrIt}n|dkr^t}n|r(r(|j dd}t fd|Dr(|drd|ddfVnt |dkr t |d}dd|fV|dr d|d|dfVq nddt |fVdSndt |}}x||kr||}|j rcnj|dkr|||d !d krd d|fV|d7}n,|d kr|||d !d krd d|fV|d7}n|d kr|||d !dkrdd|fV|d7}n|t kr:|d|fVn|tksi|dkr7|||d !dkr7|dkr|d7}||}d} n tj} |d7}|}x||kr||} | dkr|d 7}qn| |krd| |||!|fVPn|d7}qWtjtd|n||kr|}|d7}xb||kr||} | |kr|Pn| d kr||dd kr|d8}Pn|d7}qVW|||!} | tkr| d|fVnd| krr| rd| |fVq| j d}xQ|d D]E} | rHd| |fVn|t | 7}dd|fV|d7}q+W|drd|d|fVqnd| |fV|d8}ntjtd|||d7}q>Wdd|fVdS(s 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 %rR"ic3@s!|]}|r|VqdS(N((t.0tsym(tlookup(s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys isiR1R3Nis::t.s..Rs##trsr'sr"cS@s|S(N((tx((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytss\R2sunterminated stringRissyntax error in revset '%s'(sr'sr"(t isinstancetbytesRtProgrammingErrorRtbytestrtNonet_syminitletterst _symletterstsplittalltlentisspacet_simpleopletterst _quotelettersRt unescapestrt ParseErrorRtkeywords( tprogramR9tsyminitletterst symletterstpartststpostltctdecodetdR8tp((R9s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyttokenizeGs           # # #                        cC@s7|r|ddkr|dStjtddS(NiR1is not a symbol(RRLR(R<((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt getsymbolscC@sA|r.|ddks&|ddkr.|dStj|dS(NiR2R1i(RRL(R<terr((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt getstrings&cC@sU| r|tk r|Sytt||SWn tk rPtj|nXdS(N(t_notsettintR\t ValueErrorRRL(R<R[tdefault((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt getintegers  cC@s8tjt|}|dk r%|Stj|dS(N(Rt parseboolRZRBRRL(R<R[tvalue((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt getbooleans cC@s/|s gS|ddkr(t|dS|gS(NiR/i(R/(R<((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytgetlists cC@s|stj|n|d}|dkr@|d|dfS|dkrZd|dfS|dkrt|ddfS|dkrdStj|dS( NiR iiRR!R(NN(RRLRB(R<R[top((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytgetranges     cC@sRt|}t||ks<|dkrNt||krNtj|n|S(Ni(ReRGRRL(R<tmintmaxR[RT((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytgetargss 0cC@s.tjt||tj|ddddS(Nt keyvaluenodeR-tkeynodeR1(Rt buildargsdictRet splitargspec(R<tfuncnametkeys((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt getargsdicts!cC@s6tj|}|dkr2t|t|<}n|S(N(t _treecachetgetRBtparse(tspecttree((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt _cachedtrees cG@st|}tj|d|S(sCreate 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')) R1R(R1R(RwRt buildtree(ttmplspectreplsttemplate((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_builds cC@s(t|}tj||dddhS(sTest 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)')) R1RR-R/(R1R(RwRt matchtree(tpatspecRvtpattern((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_matchs cC@stdd||fS(Ns!ancestors(_) and not ancestors(_)R%(R(trevstbases((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt _matchonlyscC@sot|ts|S|d}|dkrd|df}|dddkrhtd||ddfS|dddkrtd |fS|ddd krtd ||ddfS|ddd krPtd |fSnn|dkr|td|dfS|dkrP|dddkrPtd|dd|dd|dfS|ftd|dDS(srRewrite raw parsed tree to resolve ambiguous syntax which cannot be handled well by our simple top-down parseriRRiiRRRRRR RR!R*R/R Rt relsubscriptcs@s|]}t|VqdS(N(t_fixops(R7ty((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys 9s(R/(R>ttupleR(R<Rftpost((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRs$    *cC@s|dkr|S|d}|dkr=ttd|dS|dkr`ttd|dS|dkrttd|dS|d krtjtd n|d krttd |dS|d krttd|dS|dkr&t|dtd}tdd|fS|d*kr6|S|dkrL|dfS|dddddhkr{|t|dfS|dkrt|dS|dddddd d!hkrt|d}t|d"}|||fS|d#kr/t|d}t|d"}t|d$}||||fS|d%krZ|ftd&|dDS|d'kr||dt|d"fS|d(kr||dt|d"fStd)|dS(+NiRs _ and not _iR's only(_, _)R(sonly(_)Rscan't use '::' in this contextRs ancestors(_)Rsdescendants(_)Rscan't negate thatR2RR1RR*R#RR!RRR%RR RRRR iRiR/cs@s|]}t|VqdS(N(t_analyze(R7R((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys bsR-R sinvalid operator %r(R2R1( RBRR|RRLRR\RR_(R<RfRRttattbttc((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyR;sV                   cC@s t|S(sTransform 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(R<((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytanalyzeisc @s.|dkrd|fS|d}|d+kr6d|fS|dkrgt|d\}}t|d\}}t||}tdd||f}|rt|dd d d hkr|td |d|dfSt||pt||}|r|td |dfStd|}|r?|d||dffS||krTd}n||||ffS|dkrzgggfd}xt|dD]~} t| \}} | dk r | ddks| ddkr j|| fqn|j|j| qW|t dkrZddfSt |d,t ffS|dkrtd|drttd} | d| dfSt|d} | d|| dffSn2|dkrd|fS|d-kr2t|d} | d|| dffS|d.krt|d\}}t|d\}}|||||ffS|d/krt|d\}} ||| |dffS|d!krt|d\}} ||| |d|d"ffS|dkr=t d#|dD\t |ffS|d$krvt|d\}} |||d| ffS|d%krt|d} t|d\}}ttj| d&d}td'|}| d(kr|r||td)|dfS||||d|ffStd*|dS(0NiR2R1g?R%iis_() & ancestors(_)tdrafttsecrett _notpublics_phaseandancestors(_, _)s only(_, _)snot _t differencet andsmallyR*c@ss dStdkr/d\}}n@djdD}tdd|f}t|\}}j|j|2dS(Niiscs@s|]\}}|dVqdS(iN((R7twtt((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys ss_list(_)R2(RGtjoinR|t _optimizetappend(RRRRR(tssttstws(s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytflushsss  R/R#spublic()s _notpublic()RRR!RRR RRRR Rics@s|]}t|VqdS(N(R(R7R((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys sR-R t_weightscommonancestors(_)theadss_commonancestorheads(_)sinvalid operator %r(R2R1(R/(RR!R(RR (RRRR (RBRRhRRZR|RReRRGRiRtziptsumtgetattrtsymbolsRsR_( R<RftwaRtwbRRtmRRRtotf((RRRs:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRrs      %    ,             cC@st|\}}|S(s[Optimize evaluatable tree All pseudo operations should be transformed beforehand. (R(RvRtnewtree((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pytoptimizest$cC@s|r-|jdr-|jdr-d}ntjt}|jt|d|d|\}}|t|krtj t d|nt tj |d S( sGenerate a parse tree of given spec with given tokenizing options >>> _parsewith(b'foo($1)', syminitletters=_aliassyminitletters) ('func', ('symbol', 'foo'), ('symbol', '$1')) >>> _parsewith(b'$1') Traceback (most recent call last): ... ParseError: ("syntax error in revset '$1'", 0) >>> _parsewith(b'foo bar') Traceback (most recent call last): ... ParseError: ('invalid token', 4) srevset(R R9ROs invalid tokenR/R*N(R/R*( t startswithtendswithRBRtelementsRtRYRGRRLRRtsimplifyinfixops(RuR9RORXRvRS((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt _parsewiths$ t _aliasrulescB@s8eZdZedZedZedZRS(s0Parsing and expansion rule set of revset aliasess revset aliascC@st|dtS(sParse 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. RO(Rt_aliassyminitletters(Ru((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_parsescC@sD|ddkr@|dddkr@|ddt|dfSdS(NiR iR1i(Re(Rv((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt _trygetfuncs$(t__name__t __module__t__doc__Rt_sectiont staticmethodRR(((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRs  cC@stj|}tj||}|dk rxYt|jD]B\}}|jr@|j r@|td|jt |_q@q@Wn|S(sCExpand aliases in a tree, aliases is a list of (name, value) tupless warning: %s N( RtbuildmaptexpandRBtsortedt iteritemsRtwarnedRtTrue(Rvtaliasestwarntnametalias((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt expandaliases s cC@st|t s |dd kr$|S|ddkr|g}g}x|r|j}|ddkr|jt|dqF|dd kr|j|dqFtd|d}tj|qFWddj |fStd|DSd S( s-Fold elements to be concatenated by `##` iR2R1Ris#"##" can't concatenate "%s" elementtcs@s|]}t|VqdS(N(t foldconcat(R7R((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys )sN(R2R1(R2R1( R>RtpoptextendtreversedRRRRLR(RvtpendingRTtetmsg((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRs    cC@syt|d|SWnwtjk r}t|jdkr|jd}|jdd}|dd|ddtd|_nnXdS(NR9is t s^ there(RRRLRGtargstreplaceRthint(RuR9tinsttloc((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRt+s *cC@sdtjtj|S(sQuote 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'(Rt escapestrRRA(RR((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_quote:s cC@s|dkrdt|S|dkr0t|S|dkrft|tsTtnt|d|S|dkrttj|S|dkryt|jSWqt k rtqXnt j t d|dS( NRWs%dRRR;s(%s)tntbs&unexpected revspec format character %s( R^RR>R?t TypeErrorRtRthextbranchtAttributeErrorRRLR(RUtarg((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_formatargtypeHs"          cC@s$t|}|dkrdS|dkr9t||dS|dkr`ddjd|DS|dkrd tdj|S|d krd djd |DS|d kryddjd|DSWqtk rtqXn|d}dt|| |t|||fS(Nis _list('')iRWs_intlist('%s')scs@s|]}dt|VqdS(s%dN(R^(R7ta((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys bsRRs _list(%s)Rs_hexlist('%s')cs@s|]}tj|VqdS(N(RR(R7R((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys fsRs _list('%s')cs@s|]}|jVqdS(N(R(R7R((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys isis (%s or %s)(RGRRRRRt_formatlistexp(RRRRTR((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyR[s$          c@sdjfd|DS(Ns, c3@s|]}t|VqdS(N(R(R7R(R(s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pys qs(R(RR((Rs:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_formatparamexppsRTRXc G@sitj|}t|}g}d}x|t|kr$|jd|}|dkro|j||Pn|j|||!|d}y||}Wn&tk rtjt dnX|dkr|j||d7}q*nyt |}Wn&t k r%tjt dnXt j |}|r|d7}y||}Wn&tk r{tjt dnXy |j|t||Wqttfk rtjt dqXnIy|jt||Wn,ttfk rtjt dnX|d7}q*Wy#t |tjt dWnt k r[nXdj|S( s$ 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 = 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) '10:: and not 20::' >>> formatspec(b'%ld or %ld', [], [1]) "_list('') or 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\\'')" iR)is#incomplete revspec format charactersmissing argument for revspecsinvalid argument for revspecs$too many revspec arguments specifiedR(RRAtiterRGtfindRt IndexErrorRRLRtnextt StopIterationt_formatlistfuncsRsR/RR_RR( texprRtargitertretRStqRWRR((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt formatspecxsZ%             cC@stj|dS(NR2R1(R2R1(Rt prettyformat(Rv((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRscC@s.t|tr&ttt|dSdSdS(Nii(R>RRitmaptdepth(Rv((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRscC@st|t s |ddkr'tSt}x"|dD]}|t|O}q;W|ddkr}|j|ddn|SdS(NiR2R1iR (R2R1(R>Rtsett funcsusedtadd(RvtfuncsRR((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRs  s[0-9a-fA-F]{1,40}$cC@s tj|S(s,returns true if the symbol looks like a hash(t_hashretmatch(R1((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyt_ishashlikesymbolscC@s}|s gS|ddkr8t|dry|dgSnAt|dkryg}x"|dD]}|t|7}q[W|SgS(s7returns the list of symbols of the tree that look like hashes >>> gethashlikesymbols(parse(b'3::abe3ff')) ['3', 'abe3ff'] >>> gethashlikesymbols(parse(b'precursors(.)')) [] >>> gethashlikesymbols(parse(b'precursors(34)')) ['34'] >>> gethashlikesymbols(parse(b'abe3ffZ')) [] iR1ii(RRGtgethashlikesymbols(Rvtresultstsubtree((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyRs (RiR (R iR (R iR (Ri(Ri(Ri(Ri(Ri(Ri(Ri(Ri(Ri(Ri(Ri(R i(R#i (R#i (R%i(R%i(R'i(R*i(R*i(R*i(R-i(R/i(iNNNN(iNNNN(iR1NNN(iR2NNN(iNNNN(Gt __future__RR2ti18nRRRRRRRtutilsRRBRRMRRJRt iterbytestrRIt ascii_letterstencodetdigitsRtbytechrtxrangeRCRDRYtobjectR]RZR\RaRdReRgRjRqRrRwR|RRRRRRRRRtbasealiasrulesRRRRtRRRRRRRRRtretcompileRRR(((s:/usr/lib64/python2.7/site-packages/mercurial/revsetlang.pyts (       /|             . b         W