
    6h                    t    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  S r " S S5      rS	 r " S
 S5      rg)    )annotationsN   )_)errormatchpycompatscmutilutilc              #    #    SnSnU[        U 5      :  a  UR                  X5      nU(       d  g UR                  5       u  pVX0R                  SX%5      S-   -  nU R	                  SX%5      S-   =(       d    UnU R                  SU5      S-   =(       d    [        U 5      S-   nUS-
  nX5U-
  Xg-
  XU 4v   U[        U 5      :  a  M  g g 7f)Nr      
r   )lensearchspancountrfindfind)	bodyregexpbeginlinenumr   mstartmendlstartlends	            0/usr/lib/python3/dist-packages/mercurial/grep.py
matchlinesr      s     EG
#d)
d*zz|::eU3a77E51A5>		%&*;c$i!mqyt47HHH #d)
s   C CCc                  ,    \ rS rSrS rS rS rS rSrg)	linestate&   c                4    Xl         X l        X0l        X@l        g N)liner   colstartcolend)selfr"   r   r#   r$   s        r   __init__linestate.__init__'   s    	     c                ,    [        U R                  5      $ r!   )hashr"   )r%   s    r   __hash__linestate.__hash__-   s    DIIr(   c                4    U R                   UR                   :H  $ r!   )r"   )r%   others     r   __eq__linestate.__eq__0   s    yyEJJ&&r(   c              #    #    U R                   U R                  4v   U R                  nU[        U R                  5      :  a|  UR	                  U R                  U5      nU(       d  gUR                  5       U:X  a  US-  nO"UR                  5       v   UR                  5       nU[        U R                  5      :  a  M{  gg7f)z+Iterate all (start, end) indices of matchesr   N)r#   r$   r   r"   r   endr   )r%   r   pms       r   findposlinestate.findpos3   s     mmT[[((KK#dii. dii+Auuw!|QffhEEG #dii. s   B9B?=B?)r$   r#   r"   r   N)	__name__
__module____qualname____firstlineno__r&   r+   r/   r5   __static_attributes__ r(   r   r   r   &   s    'r(   r   c              #  p  #    [         R                  " S X5      nUR                  5        H  u  p4pVnUS:X  a  [        Xg5       H  nSX   4v   M     M)  US:X  a  [        XE5       H  nSX   4v   M     MK  US:X  d  MS  [        XE5       H  nSX   4v   M     [        Xg5       H  nSX   4v   M     M     g 7f)Ninsert   +delete   -replace)difflibSequenceMatcherget_opcodesrange)	absmtagaloahiblobhiis	            r   difflinestatesrP   B   s     		 	 q	,B#%>>#3#C(?3_QTl" %H_3_QTl" %I3_QTl" %3_QTl" % $4s   A7B6=9B6c                  B    \ rS rSrSr SS jrS rS rS rS r	S r
S	rg
)grepsearcherR   zSearch files and revisions for lines matching the given pattern

Options:
- all_files to search unchanged files at that revision.
- diff to search files in the parent revision so diffs can be generated.
- follow to skip files across copies and renames.
c                   Xl         X l        X0l        X@l        XPl        X`l        [        R                  " UR                  5      U l	        [        R                  " U5      U l        0 U l        0 U l        [        5       U l        0 U l        g r!   )_ui_repo_regexp
_all_files_diff_followr
   lrucachefuncfile_getfiler	   getrenamedfn_getrenamed_matches_copiesset_skip	_revfiles)r%   uirepor   	all_filesdifffollows          r   r&   grepsearcher.__init__[   si     
#
))$))4"//5U
r(   c                    U R                   R                  U0 5      R                  U5      nU R                  R                  U5        U(       a  U R                  R                  U5        gg)zRExclude the given file (and the copy at the specified revision)
from future searchN)ra   getrc   add)r%   fnrevcopys       r   skipfilegrepsearcher.skipfilem   sM     ||R(,,R0

rJJNN4  r(   c              #    #    [         R                  " U R                  XU R                  5       GHT  nUR	                  5       nUR                  5       R	                  5       n[        U R                  R                  U/ 5      5       H  nU R                  U   U   nU R                  R                  U0 5      R                  U5      nX`R                  ;   a$  U(       a  U R                  R                  U5        Ms  U R                  R                  U0 5      R                  U=(       d    U/ 5      n	U	(       d	  U(       d  M  XcX4v   M     U R                  U	 U R                  (       a  GM:  U R                  R                  5         GMW     g7f)zWalk files and revisions to yield (fn, ctx, pstates, states)
matches

states is a list of linestate objects. pstates may be empty unless
diff is True.
N)r	   walkchangerevsrV   _prepro   p1sortedrd   rl   r`   ra   rc   rm   clear)
r%   revsmakefilematcherctxro   parentrn   statesrp   pstatess
             r   searchfilesgrepsearcher.searchfilesu   s     ))JJtzz
C '')CVVX\\^FT^^//R89s+B/||''R044R8#

t,--++FB7;;DJBKff722 : s# >>>##%'
s   D8F	>&F	) F	c                    U R                   U   R                  U/ 5        U R                   U   U   nUc  g [        X0R                  5       H#  u  pVpx[	        XXg5      n	UR                  U	5        M%     g r!   )r`   
setdefaultr   rW   r   append)
r%   rn   ro   r   r4   lnumcstartcendr"   ss
             r   	_grepbodygrepsearcher._grepbody   sf    c%%b"-MM#r"<(24(F$D$$f3AHHQK )Gr(   c                   UR                  5       nUc  X   n UR                  5       $ U R                  U5      nUR	                  U5      n UR                  U5      $ ! [         a     g f = f! [        R                   aA    U R                  R                  [        S5      U[        R                  " U5      S.-  5         g f = f)Ns8   cannot search in censored file: %(filename)s:%(revnum)s
)s   filenames   revnum)ro   dataFileNotFoundErrorr]   filenodereadr   CensoredNodeErrorrU   warnr   r   bytestr)r%   r{   rn   ro   fctxflogfnodes          r   	_readfilegrepsearcher._readfile   s    ggi;7Dyy{" ==$DLL$E	yy'' %  ** 5 %'83C3CC3HI	Js$   A A- 
A*)A*-ACCc           
     
  ^ UR                  5       nUR                  5       nU R                  R                  U0 5        U R                  (       a,  UR                  5       nU R                  R                  U0 5        U R
                  R                  U/ 5      nUc+  U R                  R                  R                  R                  nO[        R                  nU" 5          U R                  (       a*  [        R                  " TS 5      mUR                  T5      nOU4S jUR!                  5        5       nU GH2  n	Ub  X;  a  M  S n
U R"                  (       a`  U R%                  X5      n
U
(       aH  XR&                  R                  U0 5      U	'   XR(                  ;   a  U R(                  R+                  U
5        XR(                  ;   a  M  UR-                  U	5        XR                  U   ;  a!  U R/                  XU R1                  X5      5        U R                  (       d  M  U
=(       d    U	nXR                  W   ;  d  GM	  X;   d  GM  U R/                  XU R1                  XK5      5        GM5     S S S 5        g ! , (       d  f       g = f)Nc                    g r!   r<   )fmsgs     r   <lambda>$grepsearcher._prep.<locals>.<lambda>   s    $r(   c              3  F   >#    U  H  nT" U5      (       d  M  Uv   M     g 7fr!   r<   ).0r   fmatchs     r   	<genexpr>%grepsearcher._prep.<locals>.<genexpr>   s     A1vayQQs   !	!)ro   rv   r`   r   rY   rd   rV   wvfsauditcachedr
   nullcontextmanagerrX   matchmodbadmatchmatchesfilesrZ   r_   ra   rc   rm   r   r   r   )r%   r{   r   ro   pctxr|   r   contextmanager	filenamesrn   rp   pfns     `         r   ru   grepsearcher._prep   s   ggivvx  b)::XXZFMM$$VR0))#r2; "ZZ__2299N!44N!**63FGKK/	A		A	 ?r}<<++B4D?C//R8<+ JJNN40#R ]]3//NN2DNN3,CD:::*"C--"77CKsDNN44MN1   s   D=I4I4=I4&I44
J)rX   ra   rY   rZ   r]   r_   r`   rW   rV   rd   rc   rU   N)FFF)r7   r8   r9   r:   __doc__r&   rq   r   r   r   ru   r;   r<   r(   r   rR   rR   R   s-     EJ$!&8,-Or(   rR   )
__future__r   rC   i18nr    r   r   r   r   r	   r
   r   r   rP   rR   r<   r(   r   <module>r      s=    #   I 8# LO LOr(   