
    6h	J                       S SK Jr  S SKrSSKJr  SSKJrJrJr	J
rJrJrJrJr  SSKJr  \R$                  r\R(                  r\R,                  r\R0                  r\R4                  r\R6                  r\R8                  r\R<                  r\R>                  rS r S r!S	 r"S
 r#S r$S r%S r&S r'S r(S r)S r*\RV                  r+\RX                  " \+5      r-\-" SS\S9S 5       r.\-" SS\S9S 5       r/\-" SS\S9S 5       r0\-" SS\S9S 5       r1\-" SS\S9S 5       r2\-" SS\S9S 5       r3\-" S S\S9S! 5       r4\-" S"S\S9S# 5       r5\-" S$5      S% 5       r6\-" S&\S'9S( 5       r7\-" S)5      S* 5       r8\-" S+5      S, 5       r9\-" S-\S'9S. 5       r:\-" S/\S'9S0 5       r;\-" S1\S'9S2 5       r<\-" S3\S'9S4 5       r=\-" S5\S'9S6 5       r>S7 r?S8 r@\-" S9\S'9S: 5       rA\-" S;\S'9S< 5       rB\-" S=\S'9S> 5       rC\-" S?5      S@ 5       rD\-" SA\S'9SB 5       rE\-" SC\S'9SD 5       rF\-" SE5      SF 5       rG\!\"\"\#\$\%\&\(\)\'\*SG.rH " SH SI5      rISLSJ jrSK rJ\+R                  5       rLg)M    )annotationsN   )_)errorfilesetlangmatch
mergestatepycompat	registrarscmutilutil)
stringutilc                z    U(       d  [         R                  " [        S5      5      e[        US      " U /USS  Q76 $ )Ns   missing argumentr   r   )r   
ParseErrorr   methodsmctxxs     3/usr/lib/python3/dist-packages/mercurial/fileset.pygetmatchr   '   s:    q!45661Q4=&!"&&    c                ~    [        [        US5      R                  5       5      n[        U R	                  U5      U5      $ )Ns   status hint must be a string)set	getstringsplitr   
withstatus)r   r   hintkeyss       r   getmatchwithstatusr   -   s3    y>?EEGHDDOOD)1--r   c                &    U R                  U/5      $ N)matcherr   s     r   stringmatchr#   2   s    <<r   c                ^    [        U [        X[        R                  [	        S5      5      5      $ Ns   pattern must be a string)r#   _getkindpatmatchmodallpatternkindsr   )r   r   ys      r   kindpatmatchr*   6   s-    (**A.I,J	
 r   c           
         [         R                  nU Vs/ s H  n[        X2[        S5      5      PM     nnU R	                  U5      $ s  snf r%   )r'   r(   
getpatternr   r"   )r   xsallkindsr   patternss        r   patternsmatchr0   ?   sL    ''HIKIKA
1"= >?   <<!!s   Ac                z    [        X5      n[        U R                  U5      U5      n[        R                  " X45      $ r!   )r   narrowedr'   intersectmatchersr   r   r)   xmyms        r   andmatchr7   G   2    	$	B	$--#Q	'B%%b--r   c                n    U Vs/ s H  n[        X5      PM     nn[        R                  " U5      $ s  snf r!   )r   r'   unionmatcher)r   r-   r   mss       r   ormatchr<   M   s1    %'	(R(4
RB	(  $$ 
)s   2c                F   ^ [        X5      mU R                  U4S jST4S9$ )Nc                   > T" U 5      (       + $ r!    )fms    r   <lambda>notmatch.<locals>.<lambda>T   s    !Hr   s   <not %r>predrepr)r   	predicate)r   r   rA   s     @r   notmatchrG   R   s&    A>>,Q7G>HHr   c                z    [        X5      n[        U R                  U5      U5      n[        R                  " X45      $ r!   )r   r2   r'   differencematcherr4   s        r   
minusmatchrJ   W   r8   r   c                P    [         R                  " [        S5      [        S5      S9e)Ns    can't use a list in this contexts   see 'hg help "filesets.x or y"')r   )r   r   r   )r   r-   s     r   	listmatchrL   ]   s'    


	
-.34 r   c                    [        U5      nU[        ;   a  [        U   " X5      $ S n[        R                  5        VVs/ s H  u  pVU" U5      (       d  M  UPM     nnn[        R                  " X75      es  snnf )Nc                     [        U SS 5      S L$ )N__doc__)getattr)fns    r   rB   func.<locals>.<lambda>i   s    gb)T2$>r   )	getsymbolsymbolsitemsr   UnknownIdentifier)r   abfuncnamekeepsrQ   symss           r   funcr]   d   s`    |H7x ))>D$]]_9_'1RA_D9

!
!(
11 :s   A5A5s
   modified()T)
callstatusweightc                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z0File that is modified according to :hg:`status`.r   s   modified takes no argumentss   modifiedrD   )getargsr   r   statusmodifiedrF   __contains__r   r   r[   s      r   rc   rc   y   sE     Aq!Q567DKKM""#A>>!..;>??r   s   added()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z-File that is added according to :hg:`status`.r   s   added takes no argumentss   addedrD   )ra   r   r   rb   addedrF   rd   re   s      r   rg   rg      E     Aq!Q234DKKM A>>!..8><<r   s	   removed()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z/File that is removed according to :hg:`status`.r   s   removed takes no argumentss   removedrD   )ra   r   r   rb   removedrF   rd   re   s      r   rj   rj      E     Aq!Q456DKKM!!"A>>!..:>>>r   s	   deleted()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )zAlias for ``missing()``.r   s   deleted takes no arguments   deletedrD   ra   r   r   rb   deletedrF   rd   re   s      r   ro   ro      rk   r   s	   missing()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z/File that is missing according to :hg:`status`.r   s   missing takes no argumentsrm   rD   rn   re   s      r   missingrq      rk   r   s	   unknown()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z/File that is unknown according to :hg:`status`.r   s   unknown takes no arguments   unknownrD   )ra   r   r   rb   unknownrF   rd   re   s      r   rt   rt      rk   r   s	   ignored()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z/File that is ignored according to :hg:`status`.r   s   ignored takes no arguments   ignoredrD   )ra   r   r   rb   ignoredrF   rd   re   s      r   rw   rw      rk   r   s   clean()c                    [        USS[        S5      5        [        U R                  5       R                  5      nU R                  UR                  SS9$ )z-File that is clean according to :hg:`status`.r   s   clean takes no arguments   cleanrD   )ra   r   r   rb   cleanrF   rd   re   s      r   rz   rz      rh   r   s	   tracked()c                x    [        USS[        S5      5        U R                  U R                  R                  SS9$ )z%File that is under Mercurial control.r   s   tracked takes no argumentss   trackedrD   )ra   r   rF   ctxrd   r   s     r   trackedr}      s5     Aq!Q456>>$((//*>EEr   s   binary())r_   c                T    [        USS[        S5      5        U R                  S SSS9$ )z4File that appears to be binary (contains NUL bytes).r   s   binary takes no argumentsc                "    U R                  5       $ r!   )isbinary)fctxs    r   rB   binary.<locals>.<lambda>   s
    T]]_r   s   binaryTrE   cachera   r   
fpredicater   s     r   binaryr      s5     Aq!Q345??$y   r   s   exec()c                r   ^ [        USS[        S5      5        U R                  mU R                  U4S jSS9$ )z"File that is marked as executable.r   s   exec takes no argumentsc                ,   > TR                  U 5      S:H  $ )N   xflagsr@   r|   s    r   rB   exec_.<locals>.<lambda>       CIIaLD$8r   s   execrD   ra   r   r|   rF   r   r   r|   s     @r   exec_r      s6     Aq!Q123
((C>>87>KKr   s	   symlink()c                r   ^ [        USS[        S5      5        U R                  mU R                  U4S jSS9$ )z!File that is marked as a symlink.r   s   symlink takes no argumentsc                ,   > TR                  U 5      S:H  $ )N   lr   r   s    r   rB   symlink.<locals>.<lambda>   r   r   s   symlinkrD   r   r   s     @r   symlinkr      s6     Aq!Q456
((C>>8:>NNr   s
   resolved()c                  ^ [        USS[        S5      5        U R                  R                  5       b  U R	                  5       $ [
        R                  R                  U R                  R                  5       5      mU R                  U4S jSS9$ )z;File that is marked resolved according to :hg:`resolve -l`.r   s   resolved takes no argumentsc                ,   > U T;   =(       a    TU    S:H  $ )N   rr?   r@   r;   s    r   rB   resolved.<locals>.<lambda>       !r'+betm+r   s   resolvedrD   
ra   r   r|   revnevermergestatemodr	   readreporF   r   r   r;   s     @r   resolvedr      sp     Aq!Q567xx||~!zz|		!	!	&	&txx}}	7B>>+k   r   s   unresolved()c                  ^ [        USS[        S5      5        U R                  R                  5       b  U R	                  5       $ [
        R                  R                  U R                  R                  5       5      mU R                  U4S jSS9$ )z=File that is marked unresolved according to :hg:`resolve -l`.r   s   unresolved takes no argumentsc                ,   > U T;   =(       a    TU    S:H  $ )N   ur?   r   s    r   rB   unresolved.<locals>.<lambda>   r   r   s
   unresolvedrD   r   r   s     @r   
unresolvedr      sp     Aq!Q789xx||~!zz|		!	!	&	&txx}}	7B>>+m   r   s
   hgignore()c                    [        USS[        S5      5        U R                  R                  5       R                  R
                  $ )z/File that matches the active .hgignore pattern.r   s   hgignore takes no arguments)ra   r   r|   r   dirstate_ignorer   s     r   hgignorer      s4     Aq!Q56788==?##+++r   s
   portable()c                R    [        USS[        S5      5        U R                  S SS9$ )zVFile that has a portable name. (This doesn't include filenames with case
collisions.)
r   s   portable takes no argumentsc                2    [         R                  " U 5      S L $ r!   )r   checkwinfilename)r@   s    r   rB   portable.<locals>.<lambda>  s    $''*d2r   s   portablerD   )ra   r   rF   r   s     r   portabler     s3     Aq!Q567>>2[   r   s   grep(regex)c                >  ^  [         R                  " [        U[        S5      5      5      mU R                  U4S jSTR                  4SS9$ ! [         R                   a;  n[        R
                  " [        S5      [        R                  " U5      -  5      eSnAff = f)z+File contains the given regular expression.s   grep requires a patterns   invalid match pattern: %sNc                B   > TR                  U R                  5       5      $ r!   )searchdata)r   rs    r   rB   grep.<locals>.<lambda>  s    QXXdiik*r   s   grep(%r)Tr   )
recompiler   r   r   r   r   forcebytestrr   pattern)r   r   er   s      @r   grepr     s    
JJyA&@$ABC
 ??*qyy)   	 88 
*+j.E.Ea.HH
 	

s   )A B!6BBc                    U R                  5       R                  5       n [        R                   Ht  u  pU R	                  U5      (       d  M  U S [        U5      *  nSnSU;   a#  US[        UR                  S5      S   5      -  -  n[        [        U5      U-   U-  5      S-
  s  $    [        U 5      $ ! [         a#    [        R                  " [        S5      U -  5      ef = f)Ng      ?   .
   r   s   couldn't parse size: %s)striplowerr   
_sizeunitsendswithlenr   intfloat
ValueErrorr   r   r   )r[   kvnincs        r   
_sizetomaxr   $  s    BGGIOOOODAzz!}}iQL192QWWT]1%5!666CE!HsNa/0144 $ 1v Bq!;<q@AABs   AB3 AB3 &B3 3-C c                  ^^ U R                  5       n SU ;   aH  U R                  SS5      u  mm[        R                  " T5      m[        R                  " T5      mUU4S j$ U R	                  S5      (       a  [        R                  " U SS 5      mU4S j$ U R	                  S5      (       a  [        R                  " U SS 5      mU4S	 j$ U R	                  S
5      (       a  [        R                  " U SS 5      mU4S j$ U R	                  S5      (       a  [        R                  " U SS 5      mU4S j$ [        R                  " U 5      m[        U 5      mUU4S j$ )z>Return a function(size) -> bool from the ``size()`` expression   -r   c                &   > U T:  =(       a    U T:*  $ r!   r?   r   rW   rX   s    r   rB   sizematcher.<locals>.<lambda><      a*AF*r   s   <=   Nc                   > U T:*  $ r!   r?   r   rW   s    r   rB   r   ?  	    ar      <c                   > U T:  $ r!   r?   r   s    r   rB   r   B  	    Qr   s   >=c                   > U T:  $ r!   r?   r   s    r   rB   r   E  r   r      >c                   > U T:  $ r!   r?   r   s    r   rB   r   H  r   r   c                &   > U T:  =(       a    U T:*  $ r!   r?   r   s    r   rB   r   L  r   r   )r   r   r   	sizetoint
startswithr   )exprrW   rX   s    @@r   sizematcherr   5  s   ::<Dt|zz$"1NN1NN1**			NN48$			NN48$			NN48$			NN48$NN4 t**r   s   size(expression)c                r   ^ [        U[        S5      5      n[        U5      mU R                  U4S jSU4SS9$ )zFile 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
s   size requires an expressionc                0   > T" U R                  5       5      $ r!   )size)r   rA   s    r   rB   size.<locals>.<lambda>\  s    Qtyy{^r   s   size(%r)Tr   )r   r   r   r   )r   r   r   rA   s      @r   r   r   O  sC     Q89:DDA??#{D.A   r   s   encoding(name)c                `   ^ [        U[        S5      5      mU4S jnU R                  UST4SS9$ )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 namec                   > U R                  5       n UR                  [        R                  " T5      5        g! [         a#    [
        R                  " [        S5      T-  5      e[         a     gf = f)NTs   unknown encoding '%s'F)	r   decoder
   sysstrLookupErrorr   Abortr   UnicodeDecodeErrorr   dencs     r   encpencoding.<locals>.encpj  s`    IIK	HHX__S)* 	A++a 89C?@@! 		s   %9 5A10A1s   encoding(%r)Tr   r   r   r   )r   r   r   r   s      @r   encodingr   `  s8     Aq>?
@C ??4?C*@?MMr   s
   eol(style)c                `   ^ [        U[        S5      5      mU4S jnU R                  UST4SS9$ )zFile contains newlines of the given style (dos, unix, mac). Binary
files are excluded, files with mixed line endings match multiple
styles.
s   eol requires a style namec                  > U R                  5       (       a  gU R                  5       nTS:X  d  TS:X  a  SU;   a  gTS:X  a  [        R                  " SU5      (       a  gTS:X  a  [        R                  " S	U5      (       a  gg)
NFs   doss   wins   
Ts   unixs   (?<!)
s   macs   (?!
))r   r   r   r   r   s     r   eolpeol.<locals>.eolp  si    ==??IIK6MSF]1G^		, : :F]ryya88r   s   eol(%r)Tr   r   )r   r   r   r   s      @r   eolr   w  s8     Aq56
7C
 ??4:s*;4?HHr   s   copied()c                X    [        USS[        S5      5        S nU R                  USSS9$ )z&File that is recorded as being copied.r   s   copied takes no argumentsc                |    U R                  5       nU=(       a$    US   R                  5       U R                  5       :g  $ )Nr   )parentspath)r   ps     r   copiedpcopied.<locals>.copiedp  s-    LLN/QqTYY[DIIK//r   s   copiedTr   r   )r   r   r  s      r   copiedr    s4     Aq!Q3450 ??7Yd?CCr   s   revs(revs, pattern)c                   [        USS[        S5      5      u  p![        U[        S5      5      nU R                  R	                  5       n[
        R                  " XC/5      n/ nU HA  nXB   nU R                  UR                  5       U5      nUR                  [        X5      5        MC     U(       d  U R                  5       $ [        U5      S:X  a  US   $ [        R                  " U5      $ )zEvaluate set in the specified revisions. If the revset match multiple
revs, this will return file matching pattern in any of the revision.
r   s   revs takes two argumentss)   first argument to revs must be a revisionr   r   )ra   r   r   r|   r   r   revrangeswitchp1appendr   r   r   r'   r:   )	r   r   r   revspecr   revsmatchersr|   mcs	            r   r
  r
    s     1aA9:;DA1IJKG88==?DD),DHg[[3'(  zz|
8}{  **r   s   status(base, rev, pattern)c                   U R                   R                  5       n[        USS[        S5      5      u  p4n[        S5      n[	        X55      nU(       d  [
        R                  " U5      e[        S5      n[	        XG5      nU(       d  [
        R                  " U5      e[        R                  " X&U/5      u  pU R                  X5      n[        X5      $ )zEvaluate predicate using status change between ``base`` and
``rev``. Examples:

- ``status(3, 7, added())`` - matches files added from "3" to "7"
   s   status takes three argumentss+   first argument to status must be a revisions,   second argument to status must be a revision)r|   r   ra   r   r   r   r   r   revpairr  r   )r   r   r   rX   r   baseerrbaserevspecreverrr	  basectxr|   r  s               r   rb   rb     s     88==?DaAq!@ABGA!>?GA'Kw''>?F"Gv&&??4w)?@LG	W	"BB?r   s   subrepo([pattern])c                  ^^^ [        USS[        S5      5        U R                  nUR                  mU(       a  [	        U[
        R                  [        S5      5      m[
        R                  " T5      (       + nU(       a  U4S jmO0[
        R                  " UR                  5       R                  ST/US9mU R                  UU4S jS	T4S
9$ U R                  TR                  SS
9$ )z4Subrepositories whose paths match the given pattern.r   r   s"   subrepo takes at most one arguments*   subrepo requires a pattern or no argumentsc                   > U T:H  $ r!   r?   )r[   pats    r   rA   subrepo.<locals>.m  s    Cxr   r   )r|   c                ,   > U T;   =(       a    T" U 5      $ r!   r?   )r@   rA   sstates    r   rB   subrepo.<locals>.<lambda>  s    a6k*ad*r   s   subrepo(%r)rD   s   subrepo)ra   r   r|   substater,   r'   r(   patkindr   r   rootrF   rd   )r   r   r|   fastrA   r  r  s       @@@r   subrepor    s     Aq!Q<=>
((C\\F$$;<	
 ##C((  sxxzcUDA~~*nc5J  
 	
 ~~f11J~GGr   )s
   withstatuss   strings   symbols   kindpats   patternss   ands   ors   minuss   lists   nots   funcc                  \    \ rS rSrSS jrS rS rS rS rS r	S	 r
SS
 jrSS jrS rSrg)matchctxi  Nc                P    Xl         X l        X@l        S U l        S U l        X0l        g r!   )_basectxr|   _badfn_match_statuscwd)selfr  r|   r'  badfns        r   __init__matchctx.__init__  s$    r   c                    [        U R                  U R                  U R                  U R                  5      nXl        U R                  Ul        U$ )z<Create matchctx for a sub-tree narrowed by the given matcher)r!  r#  r|   r'  r$  r%  r&  )r(  r   r   s      r   r2   matchctx.narrowed  s7    txx4;;G||r   c                j    [        XU R                  U R                  5      nU R                  Ul        U$ r!   )r!  r'  r$  r%  )r(  r  r|   r   s       r   r  matchctx.switch
  s(    dhh<kkr   c                    [        U R                  U R                  U R                  U R                  5      nU R
                  Ul        UR                  U5        U$ )zBCreate matchctx which has precomputed status specified by the keys)r!  r#  r|   r'  r$  r%  _buildstatus)r(  r   r   s      r   r   matchctx.withstatus  s@    txx4;;Gkk$r   c                    U R                   R                  U R                  U R                  SU;   SU;   SU;   S9U l        g )Nrv   ry   rs   )listignored	listcleanlistunknown)r#  rb   r|   r%  r&  )r(  r   s     r   r1  matchctx._buildstatus  sC    }}++HHKK"d*$&"d* , 
r   c                    U R                   $ r!   )r&  r(  s    r   rb   matchctx.status  s    ||r   c                ^    U R                   R                  XR                  U R                  S9$ )N)r)  r'  )r|   r   r$  r'  )r(  r/   s     r   r"   matchctx.matcher"  s!    xx~~hkktxx~HHr   c                z    U(       a  [         R                  " U5      n[        R                  " XU R                  S9$ )z4Create a matcher to select files by predfn(filename))rE   r)  )r   	cachefuncr'   predicatematcherr$  )r(  predfnrE   r   s       r   rF   matchctx.predicate%  s/    ^^F+F((T[[
 	
r   c                ~   ^^ U R                   mTR                  5       c  UU4S jnOUU4S jnU R                  XBUS9$ )zeCreate a matcher to select files by predfn(fctx) at the current
revision

Missing files are ignored.
c                   >  TU    n UR                  5          T" U5      $ ! [         R                   a     gf = f! [         R                   a     gf = f! [        [
        [        [        4 a     gf = fNF)r   r   auditr   FileNotFoundErrorPermissionErrorNotADirectoryErrorIsADirectoryErrorr@   r   r|   r@  s     r   
fctxpredfn'matchctx.fpredicate.<locals>.fctxpredfn6  s    !q6D!JJL	!!$<' (( ! ! {{ ! ! &#&%	 ! !!s,   " < A 99AAA32A3c                T   >  TU    nT" U5      $ ! [         R                   a     gf = frD  )r   r   rJ  s     r   rK  rL  L  s7    !q6D d|# (( ! !s    ''r   )r|   r   rF   )r(  r@  rE   r   rK  r|   s    `   @r   r   matchctx.fpredicate-  s9     hh779!,$ ~~j5~IIr   c                >    [         R                  " U R                  S9$ )z"Create a matcher to select nothingr)  )r'   r   r$  r9  s    r   r   matchctx.neverU  s    ~~DKK00r   )r$  r#  r%  r&  r|   r'  r!   rD  )__name__
__module____qualname____firstlineno__r*  r2   r  r   r1  rb   r"   rF   r   r   __static_attributes__r?   r   r   r!  r!    s7    

I
&JP1r   r!  c                    [         R                  " U5      n[         R                  " U5      n[         R                  " U5      n[	        U R                  5       XUS9n[        XT5      $ )z0Create a matcher for a single fileset expressionrP  )r   parseanalyzeoptimizer!  r  r   )r|   r'  r   r)  treer   s         r   r   r   Z  sQ    T"Dt$D%DCFFHce4DDr   c                \    UR                   R                  5        H  u  p4U[        U'   M     g)z3Load fileset predicates from specified registrarobjN)_tablerU   rT   )uiextnameregistrarobjnamer]   s        r   loadpredicaterb  c  s&    "))//1
 2r   r!   )M
__future__r   r   i18nr    r   r   r   r'   r	   r   r
   r   r   r   utilsr   WEIGHT_CHECK_FILENAME_WEIGHT_CHECK_FILENAMEWEIGHT_READ_CONTENTS_WEIGHT_READ_CONTENTSWEIGHT_STATUS_WEIGHT_STATUSWEIGHT_STATUS_THOROUGH_WEIGHT_STATUS_THOROUGHrS   r   
getkindpatr&   r,   ra   r   r   r#   r*   r0   r7   r<   rG   rJ   rL   r]   rT   filesetpredicaterF   rc   rg   rj   ro   rq   rt   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  rb   r  r   r!  rb  valuesi18nfunctionsr?   r   r   <module>rs     s   # 	 	 	 	  %:: #88 **%<<  !!	!!	$$##



'.
".%
I
.2  

&&w/	 =T.A@ B@ :$~>= ?= <D@? A? <D@? A? <D@? A? <D1HI? J? <D1HI? J? :$~>= ?= <F F ;45 6 9L L <O O =0	 1	 ?>2	 3	 =0, 1, =!78 9 >"78 9 B"+4 ~6 7  %:;N <N, =!67I 8I0 ;	D 	D !.9+ :+. (@ A.  !H "H: &^1 ^1B   r   