
    q&fI                        d dl Z ddlmZ ddlmZmZmZmZ	m
Z
mZmZmZ ddlmZ ej                   Zej$                  Zej(                  Zej,                  Zej0                  Zej2                  Zej4                  Zej8                  Zej:                  Zd Zd Zd Z d	 Z!d
 Z"d Z#d Z$d Z%d Z&d Z'd Z(ejR                  Z) ejT                  e)      Z+ e+dde      d        Z, e+dde      d        Z- e+dde      d        Z. e+dde      d        Z/ e+dde      d        Z0 e+dde      d        Z1 e+dde      d         Z2 e+d!de      d"        Z3 e+d#      d$        Z4 e+d%e&      d'        Z5 e+d(      d)        Z6 e+d*      d+        Z7 e+d,e&      d-        Z8 e+d.e&      d/        Z9 e+d0e&      d1        Z: e+d2e&      d3        Z; e+d4e&      d5        Z<d6 Z=d7 Z> e+d8e&      d9        Z? e+d:e&      d;        Z@ e+d<e&      d=        ZA e+d>      d?        ZB e+d@e&      dA        ZC e+dBe&      dC        ZD e+dD      dE        ZEee e e!e"e#e$e&e'e%e(dFZF G dG dH      ZGdKdIZdJ ZHe)j                         ZJy)L    N   )_)errorfilesetlangmatch
mergestatepycompat	registrarscmutilutil)
stringutilc                 l    |st        j                  t        d            t        |d      | g|dd   S )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                 ~    t        t        |d      j                               }t        | j	                  |      |      S )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                 &    | j                  |g      S N)matcherr   s     r   stringmatchr"   1   s    <<r   c                 `    t        | t        ||t        j                  t	        d                  S Ns   pattern must be a string)r"   _getkindpatmatchmodallpatternkindsr   )r   r   ys      r   kindpatmatchr)   5   s/    q(**A.I,J	
 r   c           
          t         j                  }|D cg c]  }t        ||t        d             }}| j	                  |      S c c}w r$   )r&   r'   
getpatternr   r!   )r   xsallkindsr   patternss        r   patternsmatchr/   >   sL    ''HIKDE
1h"= >?H  <<!!s   Ac                 |    t        | |      }t        | j                  |      |      }t        j                  ||      S r    )r   narrowedr&   intersectmatchersr   r   r(   xmyms        r   andmatchr6   F   6    	$	B	$--#Q	'B%%b"--r   c                 h    |D cg c]  }t        | |       }}t        j                  |      S c c}w r    )r   r&   unionmatcher)r   r,   r   mss       r   ormatchr;   L   s2    %'	((4
	(B	(  $$ 
)s   /c                 L    t        | |      | j                  fddf      S )Nc                      |        S r     )fms    r   <lambda>znotmatch.<locals>.<lambda>S   s    !H r   s   <not %r>predrepr)r   	predicate)r   r   r@   s     @r   notmatchrE   Q   s(    qA>>,Q7G>HHr   c                 |    t        | |      }t        | j                  |      |      }t        j                  ||      S r    )r   r1   r&   differencematcherr3   s        r   
minusmatchrH   V   r7   r   c                 T    t        j                  t        d      t        d            )Ns    can't use a list in this contexts   see 'hg help "filesets.x or y"')r   )r   r   r   )r   r,   s     r   	listmatchrJ   \   s'    


	
-.34 r   c                     t        |      }|t        v rt        |   | |      S d }t        j                         D cg c]  \  }} ||      s| }}}t        j                  ||      c c}}w )Nc                      t        | dd       d uS )N__doc__)getattr)fns    r   rA   zfunc.<locals>.<lambda>h   s    gb)T2$> r   )	getsymbolsymbolsitemsr   UnknownIdentifier)r   abfuncnamekeepsrO   symss           r   funcrZ   c   se    |H7x q))>D$]]_9'1bRA9D9

!
!(D
11 :s   A+A+s
   modified()T)
callstatusweightc                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z0File that is modified according to :hg:`status`.r   s   modified takes no argumentss   modifiedrB   )getargsr   r   statusmodifiedrD   __contains__r   r   rX   s      r   r`   r`   x   sE     Aq!Q567DKKM""#A>>!..;>??r   s   added()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z-File that is added according to :hg:`status`.r   s   added takes no argumentss   addedrB   )r^   r   r   r_   addedrD   ra   rb   s      r   rd   rd      E     Aq!Q234DKKM A>>!..8><<r   s	   removed()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z/File that is removed according to :hg:`status`.r   s   removed takes no argumentss   removedrB   )r^   r   r   r_   removedrD   ra   rb   s      r   rg   rg      E     Aq!Q456DKKM!!"A>>!..:>>>r   s	   deleted()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )zAlias for ``missing()``.r   s   deleted takes no arguments   deletedrB   r^   r   r   r_   deletedrD   ra   rb   s      r   rl   rl      rh   r   s	   missing()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z/File that is missing according to :hg:`status`.r   s   missing takes no argumentsrj   rB   rk   rb   s      r   missingrn      rh   r   s	   unknown()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z/File that is unknown according to :hg:`status`.r   s   unknown takes no arguments   unknownrB   )r^   r   r   r_   unknownrD   ra   rb   s      r   rq   rq      rh   r   s	   ignored()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z/File that is ignored according to :hg:`status`.r   s   ignored takes no arguments   ignoredrB   )r^   r   r   r_   ignoredrD   ra   rb   s      r   rt   rt      rh   r   s   clean()c                     t        |ddt        d             t        | j                         j                        }| j                  |j                  d      S )z-File that is clean according to :hg:`status`.r   s   clean takes no arguments   cleanrB   )r^   r   r   r_   cleanrD   ra   rb   s      r   rw   rw      re   r   s	   tracked()c                 ~    t        |ddt        d             | j                  | j                  j                  d      S )z%File that is under Mercurial control.r   s   tracked takes no argumentss   trackedrB   )r^   r   rD   ctxra   r   s     r   trackedrz      s5     Aq!Q456>>$((//*>EEr   s   binary())r\   c                 Z    t        |ddt        d             | j                  d dd      S )z4File that appears to be binary (contains NUL bytes).r   s   binary takes no argumentsc                 "    | j                         S r    )isbinary)fctxs    r   rA   zbinary.<locals>.<lambda>   s    T]]_ r   s   binaryTrC   cacher^   r   
fpredicater   s     r   binaryr      s5     Aq!Q345??$y   r   s   exec()c                 v    t        |ddt        d             | j                  | j                  fdd      S )z"File that is marked as executable.r   s   exec takes no argumentsc                 ,    j                  |       dk(  S )N   xflagsr?   ry   s    r   rA   zexec_.<locals>.<lambda>       CIIaLD$8 r   s   execrB   r^   r   ry   rD   r   r   ry   s     @r   exec_r      s6     Aq!Q123
((C>>87>KKr   s	   symlink()c                 v    t        |ddt        d             | j                  | j                  fdd      S )z!File that is marked as a symlink.r   s   symlink takes no argumentsc                 ,    j                  |       dk(  S )N   lr   r   s    r   rA   zsymlink.<locals>.<lambda>   r   r   s   symlinkrB   r   r   s     @r   symlinkr      s6     Aq!Q456
((C>>8:>NNr   s
   resolved()c                     t        |ddt        d             | j                  j                         | j	                         S t
        j                  j                  | j                  j                               | j                  fdd      S )z;File that is marked resolved according to :hg:`resolve -l`.r   s   resolved takes no argumentsc                      | v xr |    dk(  S )N   rr>   r?   r:   s    r   rA   zresolved.<locals>.<lambda>       !r'+betm r   s   resolvedrB   
r^   r   ry   revnevermergestatemodr   readreporD   r   r   r:   s     @r   resolvedr      sp     Aq!Q567xx||~!zz|		!	!	&	&txx}}	7B>>+k   r   s   unresolved()c                     t        |ddt        d             | j                  j                         | j	                         S t
        j                  j                  | j                  j                               | j                  fdd      S )z=File that is marked unresolved according to :hg:`resolve -l`.r   s   unresolved takes no argumentsc                      | v xr |    dk(  S )N   ur>   r   s    r   rA   zunresolved.<locals>.<lambda>   r   r   s
   unresolvedrB   r   r   s     @r   
unresolvedr      sp     Aq!Q789xx||~!zz|		!	!	&	&txx}}	7B>>+m   r   s
   hgignore()c                     t        |ddt        d             | j                  j                         j                  j
                  S )z/File that matches the active .hgignore pattern.r   s   hgignore takes no arguments)r^   r   ry   r   dirstate_ignorer   s     r   hgignorer      s4     Aq!Q56788==?##+++r   s
   portable()c                 X    t        |ddt        d             | j                  d d      S )z^File that has a portable name. (This doesn't include filenames with case
    collisions.)
    r   s   portable takes no argumentsc                 0    t        j                  |       d u S r    )r   checkwinfilename)r?   s    r   rA   zportable.<locals>.<lambda>  s    $''*d2 r   s   portablerB   )r^   r   rD   r   s     r   portabler     s3     Aq!Q567>>2[   r   s   grep(regex)c                 :   	 t        j                  t        |t        d                  | j                  fddj                  fd      S # t         j                  $ r9}t	        j
                  t        d      t        j                  |      z        d}~ww xY w)z+File contains the given regular expression.s   grep requires a patterns   invalid match pattern: %sNc                 B    j                  | j                               S r    )searchdata)r~   rs    r   rA   z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!4BBc                    	 | j                         j                         } t        j                  D ]m  \  }}| j	                  |      s| d t        |        }d}d|v r#|dt        |j                  d      d         z  z  }t        t        |      |z   |z        dz
  c S  t        |       S # t        $ r" t        j                  t        d      | z        w xY w)Ng      ?   .
   r   s   couldn't parse size: %s)striplowerr   
_sizeunitsendswithlenr   intfloat
ValueErrorr   r   r   )rX   kvnincs        r   
_sizetomaxr   #  s    BGGIOOOO 	5DAqzz!}iQL192QWWT]1%5!666CE!HsNa/0144	5 1v Bq!;<q@AABs   AB+ AB+ B+ ++Cc                 t   | j                         } d| v rE| j                  dd      \  t        j                        t        j                        fdS | j	                  d      rt        j                  | dd       fdS | j	                  d      rt        j                  | dd       fd	S | j	                  d
      rt        j                  | dd       fdS | j	                  d      rt        j                  | dd       fdS t        j                  |       t        |       fdS )z>Return a function(size) -> bool from the ``size()`` expression   -r   c                     | k\  xr | k  S r    r>   r   rT   rU   s    r   rA   zsizematcher.<locals>.<lambda>;      a*AF r   s   <=   Nc                     | k  S r    r>   r   rT   s    r   rA   zsizematcher.<locals>.<lambda>>      a r      <c                     | k  S r    r>   r   s    r   rA   zsizematcher.<locals>.<lambda>A      Q r   s   >=c                     | k\  S r    r>   r   s    r   rA   zsizematcher.<locals>.<lambda>D  r   r      >c                     | kD  S r    r>   r   s    r   rA   zsizematcher.<locals>.<lambda>G  r   r   c                     | k\  xr | k  S r    r>   r   s    r   rA   zsizematcher.<locals>.<lambda>K  r   r   )r   r   r   	sizetoint
startswithr   )exprrT   rU   s    @@r   sizematcherr   4  s   ::<Dt|zz$"1NN1NN1**		NN48$		NN48$		NN48$		NN48$NN4 t**r   s   size(expression)c                 v    t        |t        d            }t        |      | j                  fdd|fd      S )a  File 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     | j                               S r    )size)r~   r@   s    r   rA   zsize.<locals>.<lambda>[  s    Qtyy{^ r   s   size(%r)Tr   )r   r   r   r   )r   r   r   r@   s      @r   r   r   N  sC     Q89:DDA??#{D.A   r   s   encoding(name)c                 d    t        |t        d            fd}| j                  |dfd      S )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                     | j                         }	 |j                  t        j                               y# t        $ r" t        j                  t        d      z        t        $ r Y yw xY w)NTs   unknown encoding '%s'F)	r   decoder	   sysstrLookupErrorr   Abortr   UnicodeDecodeErrorr~   dencs     r   encpzencoding.<locals>.encpi  s`    IIK	HHX__S)* 	A++a 89C?@@! 		s   $8 2A-,A-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                 d    t        |t        d            fd}| j                  |dfd      S )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                     | j                         ry| j                         }dk(  sdk(  rd|v rydk(  rt        j                  d|      rydk(  rt        j                  d	|      ryy)
NFs   doss   wins   
Ts   unixs   (?<!)
s   macs   (?!
))r}   r   r   r   r   s     r   eolpzeol.<locals>.eolp  sa    ==?IIK6MSF]1G^		, :F]ryya8r   s   eol(%r)Tr   r   )r   r   r   r   s      @r   eolr   v  s8     Aq56
7C
 ??4:s*;4?HHr   s   copied()c                 ^    t        |ddt        d             d }| j                  |dd      S )z&File that is recorded as being copied.r   s   copied takes no argumentsc                 r    | j                         }|xr$ |d   j                         | j                         k7  S )Nr   )parentspath)r~   ps     r   copiedpz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                    t        |ddt        d            \  }}t        |t        d            }| j                  j	                         }t        j                  ||g      }g }|D ]B  }||   }| j                  |j                         |      }|j                  t        ||             D |s| j                         S t        |      dk(  r|d   S t        j                  |      S )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   )r^   r   r   ry   r   r   revrangeswitchp1appendr   r   r   r&   r9   )	r   r   r   revspecr   revsmatchersry   mcs	            r   r   r     s     1aA9:;DAq1IJKG88==?DD7),DH )1g[[3'Q() zz|
8}{  **r   s   status(base, rev, pattern)c                    | j                   j                         }t        |ddt        d            \  }}}t        d      }t	        ||      }|st        j                  |      t        d      }t	        ||      }|st        j                  |      t        j                  |||g      \  }	}
| j                  |	|
      }t        ||      S )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)ry   r   r^   r   r   r   r   r   revpairr   r   )r   r   r   rU   r   baseerrbaserevspecreverrr   basectxry   r   s               r   r_   r_     s     88==?DaAq!@ABGAq!>?GAw'Kw''>?F6"Gv&&??4+w)?@LGS	Wc	"BB?r   s   subrepo([pattern])c                    t        |ddt        d             | j                  }|j                  |rt	        |t
        j                  t        d            t        j                         }|rfdn2t        j                  |j                         j                  dg|      | j                  fdd	f
      S | j                  j                  d
      S )z4Subrepositories whose paths match the given pattern.r   r   s"   subrepo takes at most one arguments*   subrepo requires a pattern or no argumentsc                     | k(  S r    r>   )rX   pats    r   r@   zsubrepo.<locals>.m  s    Cxr   r   )ry   c                      | v xr  |       S r    r>   )r?   r@   sstates    r   rA   zsubrepo.<locals>.<lambda>  s    a6k*ad r   s   subrepo(%r)rB   s   subrepo)r^   r   ry   substater+   r&   r'   patkindr   r   rootrD   ra   )r   r   ry   fastr@   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                   N    e Zd ZddZd Zd Zd Zd Zd Zd Z	dd	Z
dd
Zd Zy)matchctxNc                 X    || _         || _        || _        d | _        d | _        || _        y r    )_basectxry   _badfn_match_statuscwd)selfr  ry   r  badfns        r   __init__zmatchctx.__init__  s,    r   c                     t        | j                  | j                  | j                  | j                        }||_        | j                  |_        |S )z<Create matchctx for a sub-tree narrowed by the given matcher)r  r  ry   r  r  r  r  )r  r   r   s      r   r1   zmatchctx.narrowed  s9    txx4;;G||r   c                 l    t        ||| j                  | j                        }| j                  |_        |S r    )r  r  r  r  )r  r  ry   r   s       r   r   zmatchctx.switch	  s*    dhh<kkr   c                     t        | j                  | j                  | j                  | j                        }| j
                  |_        |j                  |       |S )zBCreate matchctx which has precomputed status specified by the keys)r  r  ry   r  r  r  _buildstatus)r  r   r   s      r   r   zmatchctx.withstatus  s@    txx4;;Gkk$r   c                     | j                   j                  | j                  | j                  d|v d|v d|v       | _        y )Nrs   rv   rp   )listignored	listcleanlistunknown)r  r_   ry   r  r  )r  r   s     r   r  zmatchctx._buildstatus  sC    }}++HHKK"d*$&"d* , 
r   c                     | j                   S r    )r  r  s    r   r_   zmatchctx.status  s    ||r   c                 f    | j                   j                  || j                  | j                        S )N)r  r  )ry   r   r  r  )r  r.   s     r   r!   zmatchctx.matcher!  s#    xx~~hdkktxx~HHr   c                 t    |rt        j                  |      }t        j                  ||| j                        S )z4Create a matcher to select files by predfn(filename))rC   r  )r   	cachefuncr&   predicatematcherr  )r  predfnrC   r   s       r   rD   zmatchctx.predicate$  s1    ^^F+F((XT[[
 	
r   c                     | j                   j                         fd}nfd}| j                  |||      S )z}Create a matcher to select files by predfn(fctx) at the current
        revision

        Missing files are ignored.
        c                     	 |    }	 |j                          	  |      S # t         j                  $ r Y yw xY w# t         j                  $ r Y yw xY w# t        t
        t        t        f$ r Y yw xY wNF)r   r   auditr   FileNotFoundErrorPermissionErrorNotADirectoryErrorIsADirectoryErrorr?   r~   ry   r(  s     r   
fctxpredfnz'matchctx.fpredicate.<locals>.fctxpredfn5  s    !q6D!JJL	!!$<' (( ! ! {{ ! ! &#&%	 ! !!s,   " ; A 88AAA0/A0c                 R    	 |    } |      S # t         j                  $ r Y yw xY wr+  )r   r   r1  s     r   r2  z'matchctx.fpredicate.<locals>.fctxpredfnK  s7    !q6D d|# (( ! !s    &&r   )ry   r   rD   )r  r(  rC   r   r2  ry   s    `   @r   r   zmatchctx.fpredicate,  s;     hh779!,$ ~~j85~IIr   c                 B    t        j                  | j                        S )z"Create a matcher to select nothingr  )r&   r   r  r#  s    r   r   zmatchctx.neverT  s    ~~DKK00r   r    r+  )__name__
__module____qualname__r  r1   r   r   r  r_   r!   rD   r   r   r>   r   r   r  r    s7    

I
&JP1r   r  c                     t        j                  |      }t        j                  |      }t        j                  |      }t	        | j                         | ||      }t        ||      S )z0Create a matcher for a single fileset expressionr5  )r   parseanalyzeoptimizer  r   r   )ry   r  r   r  treer   s         r   r   r   Y  sU    T"Dt$D%DCFFHc3e4DD$r   c                 Z    |j                   j                         D ]  \  }}|t        |<    y)z3Load fileset predicates from specified registrarobjN)_tablerR   rQ   )uiextnameregistrarobjnamerZ   s        r   loadpredicaterD  b  s-    "))//1 
dr   r    )Kr   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_THOROUGHrP   r   
getkindpatr%   r+   r^   r   r   r"   r)   r/   r6   r;   rE   rH   rJ   rZ   rQ   filesetpredicaterD   r`   rd   rg   rl   rn   rq   rt   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   r  r   r  rD  valuesi18nfunctionsr>   r   r   <module>rT     s   
 	 	 	  %:: #88 **%<<  !!	!!	$$##



'.
".%
I
.2  

&I&&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   