o
    WiS7                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& e'dZ(d^ddZ)d_ddZ*d d!d`d'd(Z+dad.d/Z,G d0d1 d1Z-dbd5d6Z.d7Z/d8Z0dcd;d<Z1dddEdFZ2dedIdJZ3dfdMdNZ4dgdOdPZ5dhdSdTZ6didUdVZ7djdXdYZ8ej9fdkd\d]Z:dS )l    )annotationsN)	Generator)Iterable)MutableMapping)Sequence)Anytags_from_path)color)git)output)	languages)load_config)Hook)	all_hooks)install_hook_envs)staged_files_only)Storecmd_output_b
pre_commitmsgstrreturnintc                   s(   ddddddd t  fdd| D S )N      )AFHNNaWc                 3  s    | ]
} t | V  qd S N)unicodedataeast_asian_width).0cwidths K/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/commands/run.py	<genexpr>&   s    z_len_cjk.<locals>.<genexpr>)sum)r   r*   r(   r+   _len_cjk$   s   r.   startcolsend_lenc                 C  s$   d|t |  | d  }|  | S )N.r   )r.   )r/   r0   r1   dotsr*   r*   r+   
_start_msg)   s   r4    )postfixend_msg	end_color	use_colorboolr6   c                 C  sH   d|t |  t| t| d  }t|||}|  | | | dS )Nr2   r   
)r.   lenr
   format_color)r/   r0   r7   r8   r9   r6   r3   endr*   r*   r+   	_full_msg.   s   $	r?   namesIterable[str]includeexcludeGenerator[str]c                   s*   t |t |  fdd| D S )Nc                 3  s(    | ]} |r  |s|V  qd S r#   )search)r&   filename
exclude_re
include_rer*   r+   r,   B   s    
z,filter_by_include_exclude.<locals>.<genexpr>)recompile)r@   rB   rC   r*   rG   r+   filter_by_include_exclude<   s   rL   c                   @  sH   e Zd ZdddZejdd
dZdddZdddZe	d ddZ
dS )!
Classifier	filenamesrA   r   Nonec                 C  s   dd |D | _ d S )Nc                 S  s   g | ]
}t j|r|qS r*   )ospathlexistsr&   fr*   r*   r+   
<listcomp>K       z'Classifier.__init__.<locals>.<listcomp>)rN   )selfrN   r*   r*   r+   __init__J   s   zClassifier.__init__rF   r   set[str]c                 C  s   t |S r#   r   )rW   rF   r*   r*   r+   _types_for_fileM   s   zClassifier._types_for_filer@   typestypes_orexclude_typesrD   c                 c  sT    t |}t |}t |}|D ]}| |}||kr'|r ||@ r'||@ s'|V  qd S r#   )	frozensetrZ   )rW   r@   r[   r\   r]   rF   tagsr*   r*   r+   by_typesQ   s    
zClassifier.by_typeshookr   c                 C  s$   |  t| j|j|j|j|j|jS r#   )r`   rL   rN   filesrC   r[   r\   r]   )rW   ra   r*   r*   r+   filenames_for_hookd   s   zClassifier.filenames_for_hookrB   rC   c                 C  s6   t jdkrt jdkrdd |D }t|||}t|S )N/\c                 s  s     | ]}| tjtjV  qd S r#   )replacerP   sepaltseprS   r*   r*   r+   r,   |   s    z)Classifier.from_config.<locals>.<genexpr>)rP   rh   rg   rL   rM   )clsrN   rB   rC   r*   r*   r+   from_configp   s   zClassifier.from_configN)rN   rA   r   rO   )rF   r   r   rY   )
r@   rA   r[   rA   r\   rA   r]   rA   r   rD   )ra   r   r   rD   )rN   rA   rB   r   rC   r   r   rM   )__name__
__module____qualname__rX   	functoolscacherZ   r`   rc   classmethodrj   r*   r*   r*   r+   rM   I   s    


rM   environMutableMapping[str, str]rY   c                 C  s    |  dd}dd |dD S )NSKIPr5   c                 S  s   h | ]
}|  r|  qS r*   )strip)r&   skipr*   r*   r+   	<setcomp>   rV   z_get_skips.<locals>.<setcomp>,)getsplit)rq   skipsr*   r*   r+   
_get_skips   s   r{   Skippedz(no files to check)srO   c                 C  s   t t| tj| d S r#   )r   
write_liner
   r=   SUBTLE)r}   r9   r*   r*   r+   _subtle_line   s   r   
classifierra   r   rz   diff_beforebytesverbosetuple[bool, bytes]c              
   C  s   t | |}|j|v s|j|v r*tt|jtt	j
||d d }d}	|}
d}d}n|sI|jsItt|jttt	j||d d }d}	|}
d}d}nqtt|jd|d |jsYd}t }t|j }||j|j |j|j|j|j||jd	k|j|d
\}	}W d    n1 sw   Y  tt | dpd}t }
||
k}|	s|rt	j}d}nt	j}d}t t	!||| |s|j"s|	s|rt#d|j | |s|j"r|d urt#d| d| |	rt#d|	 | |rt#d| |$ rt   tj%|$ |j&d t   |pt'|	|
fS )N)r/   r7   r8   r9   r0   r   F    )r/   r6   r7   r8   r9   r0      )r/   r1   r0   r*   local)is_localrequire_serialr
   r   FailedPassedz- hook id: z- duration: r}   z- exit code: z"- files were modified by this hook)logfile_name)(tuplerc   idaliasr   writer?   nameSKIPPEDr
   YELLOW
always_runNO_FILES	TURQUOISEr4   pass_filenamestime	monotonicr   languagein_envprefixlanguage_versionrun_hookentryargssrcr   round	_get_diffREDGREENr~   r=   r   r   rt   write_line_blog_filer:   )r   ra   rz   r0   r   r   r9   rN   durationretcode
diff_afterfiles_modifiedouttime_beforer   print_colorstatusr*   r*   r+   _run_single_hook   s   		





r   hooksSequence[Hook]c                 C  sB   | rt dd | D }nd}|d tt d tt }t |dS )zCompute the number of columns to display hook messages.  The widest
    that will be displayed is in the no files skipped case:

        Hook name...(no files to check) Skipped
    c                 s  s    | ]}t |jV  qd S r#   )r.   r   r&   ra   r*   r*   r+   r,      s    z _compute_cols.<locals>.<genexpr>r      r   P   )maxr<   r   r   )r   name_lenr0   r*   r*   r+   _compute_cols   s
   
r   r   argparse.Namespacec                 C  sn   | j dv rdS | j dv r| jfS | jr| jrt| j| jS | jr$| jS | jr+t S t	 r3t
 S t S )N>   
post-merge
pre-rebasepost-commitpost-rewritepost-checkoutr*      
commit-msgprepare-commit-msg)
hook_stagecommit_msg_filenamefrom_refto_refr   get_changed_filesrb   	all_filesget_all_filesis_in_merge_conflictget_conflicted_filesget_staged_filesr   r*   r*   r+   _all_filenames   s   

r   c                  C  s   t ddddddd\} }} |S )Nr   diff--no-ext-diffz--no-textconvz--ignore-submodulesFcheckr   )_r   r*   r*   r+   r     s
   
r   configdict[str, Any]c              
   C  s   t |}tt|| d | d }d}t }|D ]%}t||||||j|jd\}	}||	O }| d p6|jp6|j}
|	r=|
r= nq|rf|j	rf|rf|j
rMtd td |jrWdnd	}td
dddd| f |S )zActually run the hooks.rb   rC   r   )r   r9   	fail_fastzpre-commit hook(s) made changes.
If you are seeing this message in CI, reproduce locally with: `pre-commit run --all-files`.
To run `pre-commit` as part of git workflow, use `pre-commit install`.zAll changes made by hooks:alwaysneverr   z
--no-pagerr   r   z--color=)r   rM   rj   r   r   r   r   r
   r   show_diff_on_failurer   r   r~   
subprocesscall)r   r   rz   r   r0   r   retval
prior_diffra   current_retvalr   git_color_optr*   r*   r+   
_run_hooks  s8   


r   c                  C  s   t ddd\} }} t| S )Nr   zls-filesz
--unmerged)r   r:   rt   )r   stdoutr*   r*   r+   _has_unmerged_pathsE  s   r   config_filec                 C  s"   t dddd| dd\}}}|dkS )Nr   r   z--quietr   Fr   r   r   )r   r   r   r*   r*   r+   _has_unstaged_configJ  s   r   storer   c           	        sl   j  o j }|rt rtd dS t jt jkr%td dS |r6t| r6td|  d dS  j	dv rJ j
sJtd j	 d dS  j	d	krV|d
rVdS  jr^ j|d<  jrf j|d<  jr jr j|d<  j|d<  j|d<  j|d<  jr jr j|d<  j|d<  jr jr jr jr j|d<  j|d<  j|d<  j|d<  jr j|d<  jr j|d<  jrȈ j|d< d|d< t Y}|r|t|j t| } fddt||D } jr	|s	t d j d  j	 d 	 W d    dS t!|fd!d|D }t"|| t#|| W  d    S 1 s-w   Y  t$d")#Nz+Unmerged files.  Resolve before committing.r   z%Specify both --from-ref and --to-ref.z4Your pre-commit configuration is unstaged.
`git add z` to fix this.r   z6`--commit-msg-filename` is required for `--hook-stage `r   _PRE_COMMIT_SKIP_POST_CHECKOUTr   PRE_COMMIT_COMMIT_MSG_SOURCEPRE_COMMIT_COMMIT_OBJECT_NAMEPRE_COMMIT_ORIGINPRE_COMMIT_SOURCEPRE_COMMIT_FROM_REFPRE_COMMIT_TO_REFPRE_COMMIT_PRE_REBASE_UPSTREAMPRE_COMMIT_PRE_REBASE_BRANCHPRE_COMMIT_LOCAL_BRANCHPRE_COMMIT_REMOTE_BRANCHPRE_COMMIT_REMOTE_NAMEPRE_COMMIT_REMOTE_URLPRE_COMMIT_CHECKOUT_TYPEPRE_COMMIT_IS_SQUASH_MERGEPRE_COMMIT_REWRITE_COMMAND1
PRE_COMMITc                   s:   g | ]} j r|j j ks|j j kr j|jv r|qS r*   )ra   r   r   r   stagesr   r   r*   r+   rU     s    zrun.<locals>.<listcomp>zNo hook with id `z` in stage `c                   s$   g | ]}|j  vr|j vr|qS r*   )r   r   r   )rz   r*   r+   rU     s
    unreachable)%r   rb   r   loggererrorr:   r   r   r   r   r   rx   prepare_commit_message_sourcecommit_object_namepre_rebase_upstreampre_rebase_branchremote_name
remote_urlremote_branchlocal_branchcheckout_typeis_squash_mergerewrite_command
contextlib	ExitStackenter_contextr   	directoryr   r   ra   r   r~   r{   r   r   AssertionError)	r   r   r   rq   stash
exit_stackr   r   
to_installr*   )r   rz   r+   runR  s   






















"r  )r   r   r   r   )r/   r   r0   r   r1   r   r   r   )r/   r   r0   r   r7   r   r8   r   r9   r:   r6   r   r   r   )r@   rA   rB   r   rC   r   r   rD   )rq   rr   r   rY   )r}   r   r9   r:   r   rO   )r   rM   ra   r   rz   rY   r0   r   r   r   r   r:   r9   r:   r   r   )r   r   r   r   )r   r   r   rA   )r   r   )
r   r   r   r   rz   rY   r   r   r   r   )r   r:   )r   r   r   r:   )
r   r   r   r   r   r   rq   rr   r   r   );
__future__r   argparser  rn   loggingrP   rJ   r   r   r$   collections.abcr   r   r   r   typingr   identify.identifyr	   r   r
   r   r   pre_commit.all_languagesr   pre_commit.clientlibr   pre_commit.hookr   pre_commit.repositoryr   r   pre_commit.staged_files_onlyr   pre_commit.storer   pre_commit.utilr   	getLoggerr   r.   r4   r?   rL   rM   r{   r   r   r   r   r   r   r   r   r   r   rq   r  r*   r*   r*   r+   <module>   s^    




8


`



+
