o ]LbJ @s<ddlmZddlZddlZddlmZddlmZddlm Z m Z m Z m ZmZmZmZmZddlmZe jZe jZe jZe jZe jZe jZe jZe j Z e j!Z!dd Z"d d Z#d d Z$ddZ%ddZ&ddZ'ddZ(ddZ)ddZ*ddZ+ddZ,e j-Z-e.e-Z/e/dded d!d"Z0e/d#ded d$d%Z1e/d&ded d'd(Z2e/d)ded d*d+Z3e/d,ded d-d.Z4e/d/ded d0d1Z5e/d2ded d3d4Z6e/d5ded d6d7Z7e/d8d9d:Z8e/d;ed<d=d>Z9e/d?d@dAZ:e/dBdCdDZ;e/dEed<dFdGZe/dNed<dOdPZ?e/dQed<dRdSZ@dTdUZAdVdWZBe/dXed<dYdZZCe/d[ed<d\d]ZDe/d^ed<d_d`ZEe/dadbdcZFe/dded<dedfZGe/dged<dhdiZHe/djdkdlZIe#e$e$e%e&e'e(e*e+e)e,dm ZJGdndodoeKZLdtdpdqZ drdsZMe-NZOdS)u)absolute_importN)_getattr)error filesetlangmatch mergestatepycompat registrarscmutilutil) stringutilcCs2|s ttdt|d|g|ddRS)Nsmissing argumentrr)r ParseErrorrmethodsmctxxr3/usr/lib/python3/dist-packages/mercurial/fileset.pygetmatch)s rcCs"tt|d}t|||S)Nsstatus hint must be a string)set getstringsplitr withstatus)rrhintkeysrrrgetmatchwithstatus/srcCs ||gSN)matcherrrrr stringmatch4s r!cCst|t||tjtdS)Npattern must be a string)r! _getkindpatmatchmodallpatternkindsr)rryrrr kindpatmatch8s r'cs"tjfdd|D}||S)Ncsg|] }t|tdqS)r") getpatternr.0rallkindsrr Csz!patternsmatch..)r$r%r )rxspatternsrr+r patternsmatchAs   r0cC&t||}t|||}t||Sr)rnarrowedr$intersectmatchersrrr&xmymrrrandmatchI  r7csfdd|D}t|S)Ncsg|]}t|qSr)rr)rrrr-Pszormatch..)r$ unionmatcher)rr.msrr9rormatchOs r<cs$t|||jfdddfdS)Ncs | SrrfmrrVs znotmatch..spredrepr)r predicaterrr?rnotmatchTs rEcCr1r)rr2r$differencematcherr4rrr minusmatchYr8rGcGstjtdtdd)Ns can't use a list in this contextssee 'hg help "filesets.x or y"')r)rrr)rr.rrr listmatch_srHcsHt|}|tvrt|||SddfddtD}t||)NcSst|ddduS)N__doc__r)fnrrrrAkzfunc..csg|] \}}|r|qSrr)r*srJkeeprrr-mszfunc..) getsymbolsymbolsitemsrUnknownIdentifier)rabfuncnamesymsrrMrfuncfs  rWs modified()T) callstatusweightcC0t|ddtdt|j}|j|jddS)z0File that is modified according to :hg:`status`.rsmodified takes no argumentssmodifiedrB)getargsrrstatusmodifiedrD __contains__rrrLrrrr]{r]sadded()cCrZ)z-File that is added according to :hg:`status`.rsadded takes no argumentssaddedrB)r[rrr\addedrDr^r_rrrrar`ras removed()cCrZ)z/File that is removed according to :hg:`status`.rsremoved takes no argumentssremovedrB)r[rrr\removedrDr^r_rrrrbr`rbs deleted()cCrZ)zAlias for ``missing()``.rsdeleted takes no argumentsdeletedrBr[rrr\deletedrDr^r_rrrrer`res missing()cCrZ)z/File that is missing according to :hg:`status`.rsmissing takes no argumentsrcrBrdr_rrrmissingr`rfs unknown()cCrZ)z/File that is unknown according to :hg:`status`.rsunknown takes no argumentsunknownrB)r[rrr\unknownrDr^r_rrrrhr`rhs ignored()cCrZ)z/File that is ignored according to :hg:`status`.rsignored takes no argumentsignoredrB)r[rrr\ignoredrDr^r_rrrrjr`rjsclean()cCrZ)z-File that is clean according to :hg:`status`.rsclean takes no argumentscleanrB)r[rrr\cleanrDr^r_rrrrlr`rls tracked()cCs$t|ddtd|j|jjddS)z%File that is under Mercurial control.rstracked takes no argumentsstrackedrB)r[rrDctxr^rrrrtrackedsrnsbinary())rYcCs&t|ddtd|jdddddS)z4File that appears to be binary (contains NUL bytes).rsbinary takes no argumentscSs|Sr)isbinaryfctxrrrrAzbinary..sbinaryTrCcacher[r fpredicaterrrrbinarys rwsexec()c.t|ddtd|j|jfddddS)z"File that is marked as executable.rsexec takes no argumentsc|dkS)Nxflagsr=rmrrrAzexec_..sexecrBr[rrmrDrrr}rexec_rs symlink()crx)z!File that is marked as a symlink.rssymlink takes no argumentscry)Nlr{r=r}rrrAr~zsymlink..ssymlinkrBrrrr}rsymlinkrrs resolved()cPt|ddtd|jdur|Stj|j|j fddddS)z;File that is marked resolved according to :hg:`resolve -l`.rsresolved takes no argumentsNc|vo |dkS)Nrrr=r;rrrAzresolved..sresolvedrB r[rrmrevnever mergestatemodr readreporDrrrrresolved rs unresolved()cr)z=File that is marked unresolved according to :hg:`resolve -l`.rsunresolved takes no argumentsNcr)Nurr=rrrrArzunresolved..s unresolvedrBrrrrr unresolvedrrs hgignore()cCs t|ddtd|jjjS)z/File that matches the active .hgignore pattern.rshgignore takes no arguments)r[rrmrdirstate_ignorerrrrhgignoresrs portable()cCs$t|ddtd|jddddS)z^File that has a portable name. (This doesn't include filenames with case collisions.) rsportable takes no argumentscSst|duSr)rcheckwinfilenamer=rrrrAr~zportable..sportablerB)r[rrDrrrrportable srs grep(regex)c sjz tt|tdWntjy%}z ttdt|d}~ww|jfdddj fddS) z+File contains the given regular expression.sgrep requires a patternsinvalid match pattern: %sNcs|Sr)searchdatarprrrrA r~zgrep..sgrep(%r)Trs) recompilerrrrr forcebytestrrvpattern)rrerrrgreps rcCszC|}tjD]4\}}||r>|dt| }d}d|vr/|dt|dd}tt|||dWSq t|WSt ySt t d|w)Ng?. rscouldn't parse size: %s) striplowerr _sizeunitsendswithlenrintfloat ValueErrorrrr)rLkvnincrrr _sizetomax&s    rcs|}d|vr!|dd\ttfddS|dr5t|ddfddS|d rIt|ddfd dS|d r]t|ddfd dS|d rqt|ddfddSt|t|fddS)z>Return a function(size) -> bool from the ``size()`` expression-rc|ko|kSrrrrSrTrrrA>rKzsizematcher..s<=Ncs|kSrrrrSrrrAArr=cs|kSrrrrrrrAGrr>cs|kSrrrrrrrAJrrcrrrrrrrrANrK)rrr sizetoint startswithr)exprrrr sizematcher7s*           rssize(expression)cs2t|td}t||jfddd|fddS)aFile size matches the given expression. Examples: - size('1k') - files from 1024 to 2047 bytes - size('< 20k') - files less than 20480 bytes - size('>= .5MB') - files at least 524288 bytes - size('4k - 1MB') - files from 4096 bytes to 1048576 bytes ssize requires an expressioncs |Sr)sizerpr?rrrA^s zsize..ssize(%r)Trs)rrrrv)rrrrr?rrQs  rsencoding(name)c.t|tdfdd}|j|dfddS)zFile can be successfully decoded with the given character encoding. May not be useful for encodings other than ASCII and UTF-8. s"encoding requires an encoding namecsR|}z |tWdStyttdty(YdSw)NTsunknown encoding '%s'F) rdecoder sysstr LookupErrorrAbortrUnicodeDecodeErrorrqdencrrencpls  zencoding..encps encoding(%r)Trsrrrv)rrrrrrencodingbs  rs eol(style)cr)zFile contains newlines of the given style (dos, unix, mac). Binary files are excluded, files with mixed line endings match multiple styles. seol requires a style namecsd|rdS|}dksdkrd|vrdSdkr$td|r$dSdkr0td |r0dSdS) NFsdosswins Tsunixs(?.eolpseol(%r)Trsr)rrrrrreolys  rscopied()cCs*t|ddtddd}|j|dddS)z&File that is recorded as being copied.rscopied takes no argumentscSs |}|o|d|kS)Nr)parentspath)rqprrrcopiedpszcopied..copiedpscopiedTrsru)rrrrrrcopiedsrsrevs(revs, pattern)c Cst|ddtd\}}t|td}|j}t||g}g}|D]}||}|||}| t ||q"|s?| St |dkrI|dSt |S)zEvaluate set in the specified revisions. If the revset match multiple revs, this will return file matching pattern in any of the revision. rsrevs takes two argumentss)first argument to revs must be a revisionrr)r[rrrmrr revrangeswitchp1appendrrrr$r:) rrrrevspecrrevsmatchersrmmcrrrrs   rsstatus(base, rev, pattern)c Cs|j}t|ddtd\}}}td}t||}|s!t|td}t||}|s1t|t|||g\} } | | | } t | |S)zEvaluate predicate using status change between ``base`` and ``rev``. Examples: - ``status(3, 7, added())`` - matches files added from "3" to "7" sstatus takes three argumentss+first argument to status must be a revisions,second argument to status must be a revision) rmrr[rrrrr revpairrr) rrrrTrbaseerr baserevspecreverrrbasectxrmrrrrr\s       r\ssubrepo([pattern])cst|ddtd|j}|j|rDt|tjtdt }|r)fddn tj| j dg|d|j fd d d fd S|j j d d S)z4Subrepositories whose paths match the given pattern.rrs"subrepo takes at most one arguments*subrepo requires a pattern or no argumentscs|kSrr)rL)patrrr@szsubrepo..mr}cs|vo|Srrr=)r@sstaterrrArKzsubrepo..s subrepo(%r)rBssubrepo) r[rrmsubstater(r$r%patkindr rrootrDr^)rrrmfastr)r@rrrsubrepos" r) s withstatussstringssymbolskindpatspatternssandsorsminusslistsnotsfuncc@sbeZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ ddZ dS)matchctxNcCs(||_||_||_d|_d|_||_dSr)_basectxrm_badfn_match_statuscwd)selfrrmrbadfnrrr__init__s  zmatchctx.__init__cCs(t|j|j|j|j}||_|j|_|S)zrqrrmrrr fctxpredfn8s.   z'matchctx.fpredicate..fctxpredfncs*z |}W|StjyYdSwr)rr)r>rqrrrrPs  rs)rmrrD)rrrCrtrrrrrv/s  zmatchctx.fpredicatecCstj|jdS)z"Create a matcher to select nothingr)r$rrrrrrrYszmatchctx.neverrr) __name__ __module__ __qualname__rr2rrrr\r rDrvrrrrrrs     *rcCs<t|}t|}t|}t||||d}t||S)z0Create a matcher for a single fileset expressionr)rparseanalyzeoptimizerrr)rmrrrtreerrrrr ^s    r cCs"t|jD]\}}|t|<qdS)z3Load fileset predicates from specified registrarobjN)r iteritems_tablerP)uiextname registrarobjnamerWrrr loadpredicategs rr)P __future__rrri18nrr rrrr r$r rr r rutilsrWEIGHT_CHECK_FILENAME_WEIGHT_CHECK_FILENAMEWEIGHT_READ_CONTENTS_WEIGHT_READ_CONTENTS WEIGHT_STATUS_WEIGHT_STATUSWEIGHT_STATUS_THOROUGH_WEIGHT_STATUS_THOROUGHrOr getkindpatr#r(r[rrr!r'r0r7r<rErGrHrWrPfilesetpredicaterDr]rarbrerfrhrjrlrnrwrrrrrrrrrrrrrrr\rrobjectrrvalues i18nfunctionsrrrrs   (                                           c