
    	^cJ                        d dl Z ddlm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j        Zej        Zej        Zej        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j*        Z* ej+        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             Z0 e,dde          d             Z1 e,dde          d             Z2 e,d de          d!             Z3 e,d"de          d#             Z4 e,d$          d%             Z5 e,d&e'          d(             Z6 e,d)          d*             Z7 e,d+          d,             Z8 e,d-e'          d.             Z9 e,d/e'          d0             Z: e,d1e'          d2             Z; e,d3e'          d4             Z< e,d5e'          d6             Z=d7 Z>d8 Z? e,d9e'          d:             Z@ e,d;e'          d<             ZA e,d=e'          d>             ZB e,d?          d@             ZC e,dAe'          dB             ZD e,dCe'          dD             ZE e,dE          dF             ZFe e!e!e"e#e$e%e'e(e&e)dGZG G dH dI          ZHdLdJZdK ZIe*J                                ZKdS )M    N   )_getattr)errorfilesetlangmatch
mergestatepycompat	registrarscmutilutil)
stringutilc                     |s!t          j        t          d                    t          |d                  | g|dd          R  S )Ns   missing argumentr   r   )r   
ParseErrorr   methodsmctxxs     3/usr/lib/python3/dist-packages/mercurial/fileset.pygetmatchr   '   sJ     7q!4556661Q4=&!""&&&&    c                     t          t          |d                                                    }t          |                     |          |          S )Ns   status hint must be a string)set	getstringsplitr   
withstatus)r   r   hintkeyss       r   getmatchwithstatusr    -   sB    y>??EEGGHHDDOOD))1---r   c                 .    |                      |g          S N)matcherr   s     r   stringmatchr$   2   s    <<r   c                 p    t          | t          ||t          j        t	          d                              S )N   pattern must be a string)r$   _getkindpatmatchmodallpatternkindsr   )r   r   ys      r   kindpatmatchr+   6   s9    q(*A.I,J,J	
 	
  r   c                 b    t           j        fd|D             }|                     |          S )Nc           	      L    g | ] }t          |t          d                     !S )r&   )
getpatternr   ).0r   allkindss     r   
<listcomp>z!patternsmatch.<locals>.<listcomp>A   s;       DE
1h"= > >??  r   )r(   r)   r#   )r   xspatternsr0   s      @r   patternsmatchr4   ?   sG    'H   IK  H <<!!!r   c                     t          | |          }t          |                     |          |          }t          j        ||          S r"   )r   narrowedr(   intersectmatchersr   r   r*   xmyms        r   andmatchr;   G   ?    	$		B	$--##Q	'	'B%b"---r   c                 H      fd|D             }t          j        |          S )Nc                 0    g | ]}t          |          S  )r   )r/   r   r   s     r   r1   zormatch.<locals>.<listcomp>N   s#    	(	(	((4

	(	(	(r   )r(   unionmatcher)r   r2   mss   `  r   ormatchrB   M   s-    	(	(	(	(R	(	(	(B $$$r   c                 \    t          | |          |                     fddf          S )Nc                      |            S r"   r?   )fms    r   <lambda>znotmatch.<locals>.<lambda>T   s    !H r   s   <not %r>predrepr)r   	predicate)r   r   rF   s     @r   notmatchrK   R   s7    qA>>,,,,Q7G>HHHr   c                     t          | |          }t          |                     |          |          }t          j        ||          S r"   )r   r6   r(   differencematcherr8   s        r   
minusmatchrN   W   r<   r   c                 b    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   r2   s     r   	listmatchrP   ]   s4    

	
-..344   r   c                     t          |          }|t          v rt          |         | |          S d fdt                                          D             }t          j        ||          )Nc                 (    t          | dd           d uS )N__doc__r   )fns    r   rG   zfunc.<locals>.<lambda>i   s    gb)T22$> r   c                 0    g | ]\  }} |          |S r?   r?   )r/   srT   keeps      r   r1   zfunc.<locals>.<listcomp>k   s*    999'1bR9A999r   )	getsymbolsymbolsitemsr   UnknownIdentifier)r   abfuncnamesymsrW   s        @r   funcr`   d   sj    ||H7x q)))>>D9999W]]__999D

!(D
1
11r   s
   modified()T)
callstatusweightc                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z0File that is modified according to :hg:`status`.r   s   modified takes no argumentss   modifiedrH   )getargsr   r   statusmodifiedrJ   __contains__r   r   rV   s      r   rf   rf   y   sQ     Aq!Q566777DKKMM"##A>>!.;>???r   s   added()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z-File that is added according to :hg:`status`.r   s   added takes no argumentss   addedrH   )rd   r   r   re   addedrJ   rg   rh   s      r   rj   rj      Q     Aq!Q233444DKKMM  A>>!.8><<<r   s	   removed()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z/File that is removed according to :hg:`status`.r   s   removed takes no argumentss   removedrH   )rd   r   r   re   removedrJ   rg   rh   s      r   rm   rm      Q     Aq!Q455666DKKMM!""A>>!.:>>>>r   s	   deleted()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )zAlias for ``missing()``.r   s   deleted takes no arguments   deletedrH   rd   r   r   re   deletedrJ   rg   rh   s      r   rr   rr      rn   r   s	   missing()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z/File that is missing according to :hg:`status`.r   s   missing takes no argumentsrp   rH   rq   rh   s      r   missingrt      rn   r   s	   unknown()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z/File that is unknown according to :hg:`status`.r   s   unknown takes no arguments   unknownrH   )rd   r   r   re   unknownrJ   rg   rh   s      r   rw   rw      rn   r   s	   ignored()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z/File that is ignored according to :hg:`status`.r   s   ignored takes no arguments   ignoredrH   )rd   r   r   re   ignoredrJ   rg   rh   s      r   rz   rz      rn   r   s   clean()c                     t          |ddt          d                     t          |                                 j                  }|                     |j        d          S )z-File that is clean according to :hg:`status`.r   s   clean takes no arguments   cleanrH   )rd   r   r   re   cleanrJ   rg   rh   s      r   r}   r}      rk   r   s	   tracked()c                     t          |ddt          d                     |                     | j        j        d          S )z%File that is under Mercurial control.r   s   tracked takes no argumentss   trackedrH   )rd   r   rJ   ctxrg   r   s     r   trackedr      s<     Aq!Q455666>>$(/*>EEEr   s   binary())rb   c                 r    t          |ddt          d                     |                     d dd          S )z4File that appears to be binary (contains NUL bytes).r   s   binary takes no argumentsc                 *    |                                  S r"   )isbinary)fctxs    r   rG   zbinary.<locals>.<lambda>   s    T]]__ r   s   binaryTrI   cacherd   r   
fpredicater   s     r   binaryr      sF     Aq!Q344555??$$y    r   s   exec()c                     t          |ddt          d                     | j        |                     fdd          S )z"File that is marked as executable.r   s   exec takes no argumentsc                 6                         |           dk    S )N   xflagsrE   r   s    r   rG   zexec_.<locals>.<lambda>       CIIaLLD$8 r   s   execrH   rd   r   r   rJ   r   r   r   s     @r   exec_r      sI     Aq!Q122333
(C>>88887>KKKr   s	   symlink()c                     t          |ddt          d                     | j        |                     fdd          S )z!File that is marked as a symlink.r   s   symlink takes no argumentsc                 6                         |           dk    S )N   lr   r   s    r   rG   zsymlink.<locals>.<lambda>   r   r   s   symlinkrH   r   r   s     @r   symlinkr      sI     Aq!Q455666
(C>>8888:>NNNr   s
   resolved()c                 <   t          |ddt          d                     | j                                        |                                 S t
          j                            | j                                                  | 	                    fdd          S )z;File that is marked resolved according to :hg:`resolve -l`.r   s   resolved takes no argumentsNc                 $    | v o|          dk    S )N   rr?   rE   rA   s    r   rG   zresolved.<locals>.<lambda>       !r'+betm r   s   resolvedrH   
rd   r   r   revnevermergestatemodr
   readreporJ   r   r   rA   s     @r   resolvedr      s     Aq!Q566777x||~~!zz||		!	&	&tx}}	7	7B>>++++k    r   s   unresolved()c                 <   t          |ddt          d                     | j                                        |                                 S t
          j                            | j                                                  | 	                    fdd          S )z=File that is marked unresolved according to :hg:`resolve -l`.r   s   unresolved takes no argumentsNc                 $    | v o|          dk    S )N   ur?   r   s    r   rG   zunresolved.<locals>.<lambda>   r   r   s
   unresolvedrH   r   r   s     @r   
unresolvedr      s     Aq!Q788999x||~~!zz||		!	&	&tx}}	7	7B>>++++m    r   s
   hgignore()c                     t          |ddt          d                     | j                                        j        j        S )z/File that matches the active .hgignore pattern.r   s   hgignore takes no arguments)rd   r   r   r   dirstate_ignorer   s     r   hgignorer      s7     Aq!Q5667778==??#++r   s
   portable()c                 p    t          |ddt          d                     |                     d d          S )z^File that has a portable name. (This doesn't include filenames with case
    collisions.)
    r   s   portable takes no argumentsc                 .    t          j        |           d u S r"   )r   checkwinfilename)rE   s    r   rG   zportable.<locals>.<lambda>  s    $'**d2 r   s   portablerH   )rd   r   rJ   r   s     r   portabler     sD     Aq!Q566777>>22[    r   s   grep(regex)c                 D   	 t          j        t          |t          d                              nM# t           j        $ r;}t	          j        t          d          t          j        |          z            d}~ww xY w|                     fddj	        fd          S )z+File contains the given regular expression.s   grep requires a patterns   invalid match pattern: %sNc                 R                         |                                           S r"   )searchdata)r   rs    r   rG   zgrep.<locals>.<lambda>  s    QXXdiikk** r   s   grep(%r)Tr   )
recompiler   r   r   r   r   forcebytestrr   pattern)r   r   er   s      @r   grepr     s    
JyA&@$A$ABBCC8 
 
 
*++j.Ea.H.HH
 
 	

 ??****qy)    s   /3 A=6A88A=c                    	 |                                                                  } t          j        D ]\  }}|                     |          rs| d t          |                    }d}d|v r.|dt          |                    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   )rV   kvnincs        r   
_sizetomaxr   $  s   BGGIIOOO 	5 	5DAqzz!}} 5iQiL1992QWWT]]1%5!6!666CE!HHsNa/00144445 1vv B B Bq!;<<q@AAABs   B>C C /D c                    |                                  } d| v rG|                     dd          \  t          j                  t          j                  fdS |                     d          r!t          j        | dd                   fdS |                     d          r!t          j        | dd                   fd	S |                     d
          r!t          j        | dd                   fdS |                     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    o| k    S r"   r?   r   r\   r]   s    r   rG   zsizematcher.<locals>.<lambda><      a*AF r   s   <=   Nc                     | k    S r"   r?   r   r\   s    r   rG   zsizematcher.<locals>.<lambda>?      a r      <c                     | k     S r"   r?   r   s    r   rG   zsizematcher.<locals>.<lambda>B      Q r   s   >=c                     | k    S r"   r?   r   s    r   rG   zsizematcher.<locals>.<lambda>E  r   r      >c                     | k    S r"   r?   r   s    r   rG   zsizematcher.<locals>.<lambda>H  r   r   c                     | k    o| k    S r"   r?   r   s    r   rG   zsizematcher.<locals>.<lambda>L  r   r   )r   r   r   	sizetoint
startswithr   )exprr\   r]   s    @@r   sizematcherr   5  sq   ::<<Dt||zz$""1N1N1******			 +N48$$			 +N48$$			 	+N48$$			 +N48$$N4  t******r   s   size(expression)c                     t          |t          d                    }t          |          |                     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                 >     |                                            S r"   )size)r   rF   s    r   rG   zsize.<locals>.<lambda>\  s    QQtyy{{^^ r   s   size(%r)Tr   )r   r   r   r   )r   r   r   rF   s      @r   r   r   O  sZ     Q899::DDA??####{D.A    r   s   encoding(name)c                 |    t          |t          d                    fd}|                     |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                     |                                  }	 |                    t          j                             dS # t          $ r% t          j        t          d          z            t          $ r Y dS w xY w)NTs   unknown encoding '%s'F)	r   decoder   sysstrLookupErrorr   Abortr   UnicodeDecodeErrorr   dencs     r   encpzencoding.<locals>.encpj  s    IIKK	HHX_S))***4 	A 	A 	A+a 899C?@@@! 	 	 	55	s   'A   7A;:A;s   encoding(%r)Tr   r   r   r   )r   r   r   r   s      @r   encodingr   `  sU     Aq>??
@
@C     ??4?C*@?MMMr   s
   eol(style)c                 |    t          |t          d                    fd}|                     |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                     |                                  rdS |                                 }dk    sdk    rd|v rdS dk    rt          j        d|          rdS dk    rt          j        d	|          rdS dS )
NFs   doss   wins   
Ts   unixs   (?<!)
s   macs   (?!
))r   r   r   r   r   s     r   eolpzeol.<locals>.eolp  s    ==?? 	5IIKK6MMSF]]14G^^	, : :^4F]]rya88]4ur   s   eol(%r)Tr   r   )r   r   r   r   s      @r   eolr   w  sU     Aq566
7
7C
 
 
 
 
 ??4:s*;4?HHHr   s   copied()c                 v    t          |ddt          d                     d }|                     |dd          S )z&File that is recorded as being copied.r   s   copied takes no argumentsc                     |                                  }|o/|d                                         |                                 k    S )Nr   )parentspath)r   ps     r   copiedpzcopied.<locals>.copiedp  s3    LLNN/QqTYY[[DIIKK//r   s   copiedTr   r   )r   r   r   s      r   copiedr     sJ     Aq!Q3445550 0 0 ??7Yd?CCCr   s   revs(revs, pattern)c                    t          |ddt          d                    \  }}t          |t          d                    }| j                                        }t          j        ||g          }g }|D ]U}||         }|                     |                                |          }|	                    t          ||                     V|s|                                 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   )rd   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::;;DAq1IJJKKG8==??DD7),,DH ) )1g[[3''Q(((( zz||
8}}{ ***r   s   status(base, rev, pattern)c                    | j                                         }t          |ddt          d                    \  }}}t          d          }t	          ||          }|st          j        |          t          d          }t	          ||          }|st          j        |          t          j        |||g          \  }	}
| 	                    |	|
          }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)r   r   rd   r   r   r   r   r   revpairr   r   )r   r   r   r]   r   baseerrbaserevspecreverrr   basectxr   r  s               r   re   re     s     8==??DaAq!@AAB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n0t          j        |	                                j
        dg|          |                     fdd	f
          S |                     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?   )rV   pats    r   rF   zsubrepo.<locals>.m  s    Cxr   r   )r   c                 "    | v o
 |           S r"   r?   )rE   rF   sstates    r   rG   zsubrepo.<locals>.<lambda>  s    a6k*aadd r   s   subrepo(%r)rH   s   subrepo)rd   r   r   substater.   r(   r)   patkindr	   r   rootrJ   rg   )r   r   r   fastrF   r  r  s       @@@r   subrepor    s    Aq!Q<==>>>
(C\F H$;<<	
 
 #C((( 	E            sxxzzcUDDDA~~*****nc5J  
 
 	
 ~~f1J~GGGr   )s
   withstatuss   strings   symbols   kindpats   patternss   ands   ors   minuss   lists   nots   funcc                   P    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dS )matchctxNc                 Z    || _         || _        || _        d | _        d | _        || _        d S r"   )_basectxr   _badfn_match_statuscwd)selfr
  r   r  badfns        r   __init__zmatchctx.__init__  s0    r   c                 x    t          | j        | j        | j        | j                  }||_        | j        |_        |S )z<Create matchctx for a sub-tree narrowed by the given matcher)r  r  r   r  r  r  r  )r  r	   r   s      r   r6   zmatchctx.narrowed  s2    tx4;GG|r   c                 V    t          ||| j        | j                  }| j        |_        |S r"   )r  r  r  r  )r  r
  r   r   s       r   r   zmatchctx.switch
  s'    dh<<kr   c                     t          | j        | j        | j        | j                  }| j        |_        |                    |           |S )zBCreate matchctx which has precomputed status specified by the keys)r  r  r   r  r  r  _buildstatus)r  r   r   s      r   r   zmatchctx.withstatus  s?    tx4;GGk$r   c                 n    | j                             | j        | j        d|v d|v d|v           | _        d S )Nry   r|   rv   )listignored	listcleanlistunknown)r  re   r   r  r  )r  r   s     r   r#  zmatchctx._buildstatus  sF    }++HK"d*$&"d* , 
 
r   c                     | j         S r"   )r  r  s    r   re   zmatchctx.status  s
    |r   c                 P    | j                             || j        | j                  S )N)r  r  )r   r	   r  r  )r  r3   s     r   r#   zmatchctx.matcher"  s     x~~hdktx~HHHr   Fc                 f    |rt          j        |          }t          j        ||| j                  S )z4Create a matcher to select files by predfn(filename))rI   r  )r   	cachefuncr(   predicatematcherr  )r  predfnrI   r   s       r   rJ   zmatchctx.predicate%  s<     	,^F++F(XT[
 
 
 	
r   c                     | j                                         fd}nfd}|                     |||          S )z}Create a matcher to select files by predfn(fctx) at the current
        revision

        Missing files are ignored.
        Nc                     	 |          }n# t           j        $ r Y dS w xY w	 |                                 n# t           j        $ r Y dS w xY w	  |          S # t          t
          t          t          f$ r Y dS w xY wNF)r   r   auditr   FileNotFoundErrorPermissionErrorNotADirectoryErrorIsADirectoryErrorrE   r   r   r.  s     r   
fctxpredfnz'matchctx.fpredicate.<locals>.fctxpredfn6  s    !q6DD( ! ! ! 55!!JJLLLL{ ! ! ! 55!	!!6$<<' &#&%	 ! ! ! !55!s-    8 A
A
A A;:A;c                 Z    	 |          }n# t           j        $ r Y dS w xY w |          S r1  )r   r   r7  s     r   r8  z'matchctx.fpredicate.<locals>.fctxpredfnL  sF    !q6DD( ! ! ! 55!vd||#s    r   )r   r   rJ   )r  r.  rI   r   r8  r   s    `   @r   r   zmatchctx.fpredicate-  sv     h7799! ! ! ! ! ! !,$ $ $ $ $ $ ~~j85~IIIr   c                 6    t          j        | j                  S )z"Create a matcher to select nothingr  )r(   r   r  r)  s    r   r   zmatchctx.neverU  s    ~DK0000r   r"   r1  )__name__
__module____qualname__r  r6   r   r   r#  re   r#   rJ   r   r   r?   r   r   r  r    s               
  
 
 
  I I I
 
 
 
&J &J &J &JP1 1 1 1 1r   r  c                     t          j        |          }t          j        |          }t          j        |          }t	          |                                 | ||          }t          ||          S )z0Create a matcher for a single fileset expressionr;  )r   parseanalyzeoptimizer  r   r   )r   r  r   r  treer   s         r   r	   r	   Z  s`    T""Dt$$D%%DCFFHHc3e444DD$r   c                 X    |j                                         D ]\  }}|t          |<   dS )z3Load fileset predicates from specified registrarobjN)_tablerZ   rY   )uiextnameregistrarobjnamer`   s        r   loadpredicaterJ  c  s9    ")//11  
d r   r"   )Lr   i18nr   r   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_THOROUGHrX   r   
getkindpatr'   r.   rd   r   r    r$   r+   r4   r;   rB   rK   rN   rP   r`   rY   filesetpredicaterJ   rf   rj   rm   rr   rt   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  re   r  r   r  rJ  valuesi18nfunctionsr?   r   r   <module>rZ     s   
			            	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	       %: #8 *%<  !	!	$#

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