U e @sfddlmZddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl m Z dd lmZdZe jZe jZe jZe jZd d d d ddZd d d d ddZd d d d ddZd d d d ddZGdddeZedddeedddeedddeedddeiZdd dddddddd d!Zd'd"d d#d$d%Z e!d&krbe"e dS)() annotationsN) NamedTuple)Pattern)Sequence) lang_base)output)Prefix)xargszPattern[bytes]strint)patternfilenamereturnc Cshd}t|dP}t|ddD]<\}}||rd}t|d|dt|dqW5QRX|S)Nrrb)start:s )open enumeratesearchrwrite write_line_brstrip)r r retvfline_nolinerI/opt/hc_python/lib/python3.8/site-packages/pre_commit/languages/pygrep.py_process_filename_by_lines  rc Csd}t|d}|}||}|rd}|d|d}t|d|dd|dd}|d||d<td |W5QRX|S)Nrrr r) rreadrrcountrrsplitrjoin)r r rrcontentsmatchrZ matched_linesrrr_process_filename_at_once!s  r'c CsRt|d>}|D]}||rW5QRdSqt|W5QRdSQRXdSNrrr)rrr write_line)r r rrrrr!_process_filename_by_line_negated2s    r*c CsBt|d}|}W5QRX||}|r0dSt|dSdSr()rr!rrr))r r rr%r&rrr!_process_filename_at_once_negated?s   r+c@seZdZUded<ded<dS)Choicebool multilinenegateN)__name__ __module__ __qualname____annotations__rrrrr,Ms r,Tr.r/Frz Sequence[str]r-ztuple[int, bytes])prefixentryargs file_argsis_localrequire_serialcolorrcCs"tjdtf||f}t|||dS)Nz-m)r;)sys executabler0r )r5r6r7r8r9r:r;cmdrrrrun_hookZs r?zSequence[str] | None)argvrcCstjdd}|jdddd|jddd|jddd|jd d d |jd d d||}|jrjtjnd}|jr|tjtj BO}t |j |}d}t t|j|jd}|jD]}||||O}q|S)Nzgrep-like finder using python regexes. Unlike grep, this tool returns nonzero when it finds a match and zero otherwise. The idea here being that matches are "problems".) descriptionz-iz --ignore-case store_true)actionz --multilinez--negater zpython regex pattern.)help filenames*)nargsrr4)argparseArgumentParser add_argument parse_argsZ ignore_casere IGNORECASEr. MULTILINEDOTALLcompiler encodeFNSr,r/rE)r@parserr7flagsr rZ process_fnr rrrmainhs$  rU__main__)N)# __future__rrHrLr<typingrrrZ pre_commitrrZpre_commit.prefixrZpre_commit.xargsr ZENVIRONMENT_DIRZbasic_get_default_versionZget_default_versionZbasic_health_checkZ health_checkZ no_installZinstall_environmentZno_envZin_envrr'r*r+r,rRr?rUr0 SystemExitrrrrsB