
    	^cs                     v    d dl Z ddlmZ ddlmZmZmZmZm	Z	 d Z
 G d d          Zd Z G d	 d
          ZdS )    N   )_)errormatchpycompatscmutilutilc              #     K   d}d}|t          |           k     r|                    | |          }|sd S |                                \  }}||                     d||          dz   z  }|                     d||          dz   p|}|                     d|          dz   pt          |           dz   }|dz
  }|||z
  ||z
  | ||         fV  |t          |           k     d S d S )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))

dE** 	Ezz||4::eUF33a77E5&11A5>		%&&*;c$ii!mqyvvtF4K7HHHHH #d))





    c                   &    e Zd Zd Zd Zd Zd ZdS )	linestatec                 >    || _         || _        || _        || _        d S N)liner   colstartcolend)selfr!   r   r"   r#   s        r   __init__zlinestate.__init__&   s"    	 r   c                 *    t          | j                  S r    )hashr!   )r$   s    r   __hash__zlinestate.__hash__,   s    DIr   c                 "    | j         |j         k    S r    )r!   )r$   others     r   __eq__zlinestate.__eq__/   s    yEJ&&r   c              #   j  K   | j         | j        fV  | j        }|t          | j                  k     r|                    | j        |          }|sdS |                                |k    r|dz  }n*|                                V  |                                }|t          | j                  k     dS dS )z+Iterate all (start, end) indices of matchesr   N)r"   r#   r   r!   r   endr   )r$   r   pms       r   findposzlinestate.findpos2   s      mT[((((K#di..  di++A uuww!||QffhhEEGG #di..      r   N)__name__
__module____qualname__r%   r(   r+   r0    r   r   r   r   %   sP            ' ' '    r   r   c              #     K   t          j        d | |          }|                                D ]\  }}}}}|dk    r t          ||          D ]}d||         fV  .|dk    r t          ||          D ]}d| |         fV  T|dk    r>t          ||          D ]}d| |         fV  t          ||          D ]}d||         fV  d S )Ninsert   +delete   -replace)difflibSequenceMatcherget_opcodesrange)	absmtagaloahiblobhiis	            r   difflinestatesrH   A   s(     		 q!	,	,B#%>>#3#3 # #S#sC(??3__ # #QqTl""""#H__3__ # #QqTl""""#I3__ # #QqTl""""3__ # #QqTl""""# #r   c                   :    e Zd ZdZ	 d
dZd Zd Zd Zd Zd Z	d	S )grepsearchera  Search 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.
    Fc                    || _         || _        || _        || _        || _        || _        t          j        |j                  | _	        t          j        |          | _        i | _        i | _        t                      | _        i | _        d S 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%   zgrepsearcher.__init__Z   sy     
#
)$)44"/55UU
r   c                     | j                             |i                               |          }| j                            |           |r| j                            |           dS dS )zZExclude the given file (and the copy at the specified revision)
        from future searchN)rX   getrZ   add)r$   fnrevcopys       r   skipfilezgrepsearcher.skipfilel   si     |R((,,R00
r 	!JNN4     	! 	!r   c              #     K   t          j        | j        ||| j                  D ]4}|                                }|                                                                }t          | j                            |g                     D ]}| j	        |         |         }| j
                            |i                               |          }|| j        v r|r| j                            |           i| j	                            |i                               |p|g           }	|	s|r|||	|fV  | j        |= | j        s| j	                                         6dS )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   walkchangerevsrM   _prepre   p1sortedr[   rb   rW   rX   rZ   rc   clear)
r$   revsmakefilematcherctxre   parentrd   statesrf   pstatess
             r   searchfileszgrepsearcher.searchfilest   se      )Jotz
 
 	& 	&C ''))CVVXX\\^^FT^//R8899 	3 	3s+B/|''R0044R88## -
t,,,-++FB77;;DJBKK 3f 3c7F2222s# > &##%%%'	& 	&r   c                     | j         |                             |g            | j         |         |         }|d S t          || j                  D ].\  }}}}t	          ||||          }	|                    |	           /d S r    )rW   
setdefaultr   rN   r   append)
r$   rd   re   r   r/   lnumcstartcendr!   ss
             r   	_grepbodyzgrepsearcher._grepbody   s    c%%b"---M#r"<F(24(F(F 	 	$D&$$fd33AHHQKKKK	 	r   c                    |                                 }|.||         }	 |                                S # t          $ r Y d S w xY w|                     |          }|                    |          }	 |                    |          S # t          j        $ rC | j        	                    t          d          |t          j        |          dz             Y d S w xY w)Ns8   cannot search in censored file: %(filename)s:%(revnum)s
)s   filenames   revnum)re   dataFileNotFoundErrorrT   filenodereadr   CensoredNodeErrorrL   warnr   r   bytestr)r$   rp   rd   re   fctxflogfnodes          r   	_readfilezgrepsearcher._readfile   s   ggii;r7Dyy{{"$    ==$$DLL$$E	yy'''*   5  %'83CC3H3HII	J     s"   4 
AA0B ACCc           
         |                                 }|                                }| j                            |i            | j        r/|                                 }| j                            |i            | j                            |g           }|| j        j        j        j	        }nt          j        } |            5  | j        r,t          j        d           |                              }n fd|                                D             }|D ]}	||	|vr
d }
| j        rY|                     |	|          }
|
rA|
| j                            |i           |	<   |	| j        v r| j                            |
           |	| j        v rv|                    |	           |	| j        |         vr+|                     |	||                     ||	                     | j        rB|
p|	}|| j        |         vr/||v r+|                     |||                     ||                     	 d d d            d S # 1 swxY w Y   d S )Nc                     d S r    r4   )fmsgs     r   <lambda>z$grepsearcher._prep.<locals>.<lambda>   s    $ r   c              3   2   K   | ]} |          |V  d S r    r4   ).0r   fmatchs     r   	<genexpr>z%grepsearcher._prep.<locals>.<genexpr>   s0      AA1vvayyAQAAAAAAr   )re   rk   rW   rv   rP   r[   rM   wvfsauditcachedr	   nullcontextmanagerrO   matchmodbadmatchmatchesfilesrQ   rV   rX   rZ   rc   rw   r|   r   )r$   rp   r   re   pctxrq   r   contextmanager	filenamesrd   rf   pfns     `         r   rj   zgrepsearcher._prep   s   ggiivvxx  b))): 	1XXZZFM$$VR000))#r22; "Z_29NN!4N^ 	O 	O B!*63F3FGGKK//		AAAA		AAA	 O O ?r}}< 1++B44D 1?C//R88<++ JNN4000##R   T]3///NN2sDNN3,C,CDDD: O*"C$-"777C4KKsFDNN44M4MNNN1O	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   E&H99H= H=N)FFF)
r1   r2   r3   __doc__r%   rg   rt   r|   r   rj   r4   r   r   rJ   rJ   Q   s          EJ   $! ! !& & &8    ,-O -O -O -O -Or   rJ   )r;   i18nr    r   r   r   r   r   r	   r   r   rH   rJ   r4   r   r   <module>r      s                       I I I       8# # # LO LO LO LO LO LO LO LO LO LOr   