^csvddlZddlmZddlmZmZmZmZm Z dZ GddZ dZ Gd d Z dS) N)_)errormatchpycompatscmutilutilc#Kd}d}|t|kr|||}|sdS|\}}||d||dzz }|d||dzp|}|d|dzpt|dz}|dz }|||z ||z |||fV|t|kdSdS)Nr r)lensearchspancountrfindfind) bodyregexpbeginlinenumrmstartmendlstartlends 0/usr/lib/python3/dist-packages/mercurial/grep.py matchlinesrs EG #d))   dE**  Ezz|| 4::eUF33a77E5&11A5> %&&*;c$ii!mqyvv tF4K7HHHHH #d))      c&eZdZdZdZdZdZdS) linestatec>||_||_||_||_dSN)linercolstartcolend)selfr!rr"r#s r__init__zlinestate.__init__&s"     rc*t|jSr )hashr!)r$s r__hash__zlinestate.__hash__,sDIrc"|j|jkSr )r!)r$others r__eq__zlinestate.__eq__/syEJ&&rc#jK|j|jfV|j}|t|jkr||j|}|sdS||kr|dz }n*|V|}|t|jkdSdS)z+Iterate all (start, end) indices of matchesrN)r"r#r r!r endr)r$rpms rfindposzlinestate.findpos2smT[(((( K#di..   di++A uuww!||QffhhEEGG#di..      rN)__name__ __module__ __qualname__r%r(r+r0rrrr%sP '''     rrc#Ktjd||}|D]\}}}}}|dkr t||D]}d||fV.|dkr t||D]}d||fVT|dkr>t||D]}d||fVt||D]}d||fVdS)Ninsert+delete-replace)difflibSequenceMatcher get_opcodesrange) absmtagaloahiblobhiis rdifflinestatesrHAs(  q! , ,B#%>>#3#3 # #S#sC (??3__ # #QqTl"""" # H__3__ # #QqTl"""" # I  3__ # #QqTl""""3__ # #QqTl"""" # #rc:eZdZdZ d dZdZdZdZdZdZ d S) grepsearcheraSearch 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|_ tj ||_ i|_ i|_t|_i|_dSr )_ui_repo_regexp _all_files_diff_followr lrucachefuncfile_getfiler getrenamedfn _getrenamed_matches_copiesset_skip _revfiles)r$uirepor all_filesdifffollows rr%zgrepsearcher.__init__Zsy  #  )$)44 "/55  UU rc|j|i|}|j||r|j|dSdS)zZExclude the given file (and the copy at the specified revision) from future searchN)rXgetrZadd)r$fnrevcopys rskipfilezgrepsearcher.skipfilelsi|R((,,R00 r  ! JNN4  ! !rc#Ktj|j|||jD]4}|}|}t |j|gD]}|j ||}|j |i|}||j vr|r|j |i|j |i|p|g} | s|r||| |fV|j|=|js|j 6dS)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)rwalkchangerevsrM_preprep1sortedr[rbrWrXrZrcclear) r$revsmakefilematcherctxreparentrdstatesrfpstatess r searchfileszgrepsearcher.searchfilestse) Jotz   & &C''))CVVXX\\^^FT^//R8899 3 3s+B/|''R0044R88##- t,,,-++FB77;;DJBKK3f3c7F2222s#> & ##%%%' & &rc|j||g|j||}|dSt||jD].\}}}}t ||||} || /dSr )rW setdefaultrrNrappend) r$rdrerr/lnumcstartcendr!ss r _grepbodyzgrepsearcher._grepbodys c%%b"--- M# r " < F(24(F(F   $D&$$fd33A HHQKKKK  rc|}|.||} |S#t$rYdSwxYw||}||} ||S#t j$rC|j td|tj |dzYdSwxYw)Ns8cannot search in censored file: %(filename)s:%(revnum)s )sfilenamesrevnum) redataFileNotFoundErrorrTfilenodereadrCensoredNodeErrorrLwarnrrbytestr)r$rprdrefctxflogfnodes r _readfilezgrepsearcher._readfilesggii ;r7D yy{{"$    ==$$DLL$$E yy'''*    5%'83CC3H3HII J s"4 AA0BACCc |}|}|j|i|jr/|}|j|i|j|g}||jjjj }n tj }|5|j r,tjd|}n fd|D}|D]} || |vr d} |jrY|| |} | rA| |j|i| <| |jvr|j| | |jvrv|| | |j|vr+|| |||| |jrB| p| } | |j|vr/| |vr+|| ||||  ddddS#1swxYwYdS)NcdSr r4)fmsgs rz$grepsearcher._prep..s$rc32K|]}| |VdSr r4).0rfmatchs r z%grepsearcher._prep..s0AA1vvayyAQAAAAAAr)rerkrWrvrPr[rMwvfsauditcachedr nullcontextmanagerrOmatchmodbadmatchmatchesfilesrQrVrXrZrcrwr|r) r$rprrepctxrqrcontextmanager filenamesrdrfpfns ` rrjzgrepsearcher._prepsggiivvxx   b))) : 1XXZZF M $ $VR 0 0 0))#r22 ;"Z_29NN!4N ^   O O B!*63F3FGGKK// AAAA AAA  O O?r}}<1++B44D1?C //R88<++ JNN4000## R   T]3///NN2sDNN3,C,CDDD:O*"C$-"777C4KKsFDNN44M4MNNN1 O O O O O O O O O O O O O O O O O O OsE&H99H=H=N)FFF) r1r2r3__doc__r%rgrtr|rrjr4rrrJrJQsEJ$!!!&&&8,-O-O-O-O-OrrJ)r;i18nrrrrrrr rrrHrJr4rrrs I I I8 # # # LOLOLOLOLOLOLOLOLOLOr