o
    Wi                     @  sF  d dl m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 edZd<ddZd<ddZ d=ddZ!d>ddZ"d?d"d#Z#d@d%d&Z$dAd*d+Z%dBd0d1Z&dBd2d3Z'dBd4d5Z(dCd8d9Z)dDd:d;Z*dS )E    )annotationsN)Sequence)Any)	languages)load_manifest)LOCAL)META)Hook)environment_dir)Prefix)Store)clean_path_on_failure)rmtree
pre_commitvenvstrreturnc                 C     t j| dS )Nz.install_state_v1ospathjoinr    r   I/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/repository.py_state_filename_v1      r   c                 C  r   )Nz.install_state_v2r   r   r   r   r   _state_filename_v2   r   r   additional_depsSequence[str]objectc                 C  s   d| iS )Nadditional_dependenciesr   )r   r   r   r   _state!   s   r"   object | Nonec                 C  sN   t | }tj|sd S t|}t|W  d    S 1 s w   Y  d S N)r   r   r   existsopenjsonload)r   filenamefr   r   r   _read_state%   s   
$r+   hookr	   boolc                 C  s^   t | j }|jd u rdS t| j|j| j}tjt	|p%t
|t| jko.|| j| j S )NT)r   languageENVIRONMENT_DIRr
   prefixlanguage_versionr   r   r%   r   r+   r"   r!   health_check)r,   langr   r   r   r   _hook_installed.   s   

r4   Nonec              	   C  sB  t d| j d t d t d t| j }|jd us J t| j|j| j}t	j
|r3t| t|` || j| j| j || j| j}|rWtd| j d| t|}| d}t|d}|tt| j W d    n1 s{w   Y  t	|| tt|d	  W d    d S 1 sw   Y  d S )
NzInstalling environment for .z/Once installed this environment will be reused.zThis may take a few minutes...zBUG: expected environment for zh to be healthy immediately after install, please open an issue describing your environment

more info:

stagingwza+)loggerinfosrcr   r.   r/   r
   r0   r1   r   r   r%   r   r   install_environmentr!   r2   AssertionErrorr   r&   writer'   dumpsr"   replacer   close)r,   r3   r   health_errorstate_filenamer7   
state_filer   r   r   _hook_installA   s>   




	
"rE   
hook_dictsdict[str, Any]root_configc                 G  s   t |d |dd  }}|D ]}|| q|d }|d tjkr*| d | |d< |d tjkr9t|  |d< |d sC| d |d< t| jd u ry|d tjkrctd|d	  d
| d t	d |d rytd|d	  d| d t	d |S )Nr      r.   r1   default_language_versionstagesdefault_stagesz
The hook `idz6` specifies `language_version` but is using language `zW` which does not install an environment.  Perhaps you meant to use a specific language?r!   z=` specifies `additional_dependencies` but is using language `)
dictupdateCDEFAULTr   get_default_versionr/   r9   errorexit)rH   rF   retrestdctr3   r   r   r   _hookm   s4   rX   repo_configstorer   tuple[Hook, ...]c                   s,   dfdd t  fd	d
d D S )Nlanguage_namer   depsr   r   r   c                   s,   t |  }|jd u rtt S t |S r$   )r   r/   r   r   getcwd
make_local)r\   r]   r.   )rZ   r   r   _prefix   s   
z-_non_cloned_repository_hooks.<locals>._prefixc              	   3  s8    | ]}t d   |d |d t|dV  qdS )repor.   r!   rH   N)r	   createrX   .0r,   )r`   rY   rH   r   r   	<genexpr>   s    

z/_non_cloned_repository_hooks.<locals>.<genexpr>hooks)r\   r   r]   r   r   r   tuplerY   rZ   rH   r   )r`   rY   rH   rZ   r   _non_cloned_repository_hooks   s   	rk   c                   s   d d t jtj}dd t|D  d D ]}|d  vr<td|d  d d	 t	d
 q" fddd D }t
fdd|D S )Nra   revc                 S  s   i | ]}|d  |qS )rM   r   rd   r   r   r   
<dictcomp>   s    z,_cloned_repository_hooks.<locals>.<dictcomp>rg   rM   `z` is not present in repository z`.  Typo? Perhaps it is introduced in a newer version?  Often `pre-commit autoupdate` fixes this.rI   c                   s"   g | ]}t  |d   |dqS )rM   rb   )rX   rd   )by_idrH   r   r   
<listcomp>   s    z,_cloned_repository_hooks.<locals>.<listcomp>c                 3  s4    | ]}t d  t |d |V  qdS )ra   r!   N)r	   rc   r   clonerd   )ra   rY   rl   rZ   r   r   rf      s    
z+_cloned_repository_hooks.<locals>.<genexpr>)r   r   r   rq   rP   MANIFEST_FILEr   r9   rS   rT   ri   )rY   rZ   rH   manifest_pathr,   	hook_dctsr   )ro   ra   rY   rl   rH   rZ   r   _cloned_repository_hooks   s    ru   c                 C  s(   | d t thv rt| ||S t| ||S )Nra   )r   r   rk   ru   rj   r   r   r   _repository_hooks   s   rv   rg   Sequence[Hook]c                   sZ   d fdd}| sd S |   | D ]}t| qW d    d S 1 s&w   Y  d S )Nr   
list[Hook]c                    s@   t  } g } D ]}|j| vrt|s|| | |j q|S r$   )setinstall_keyr4   appendadd)seenrU   r,   rg   r   r   _need_installed   s   
z*install_hook_envs.<locals>._need_installed)r   rx   )exclusive_lockrE   )rg   rZ   r   r,   r   r~   r   install_hook_envs   s   	


"r   c                   s   t  fdd d D S )Nc                 3  s&    | ]}t | D ]}|V  q
qd S r$   )rv   )re   ra   r,   rH   rZ   r   r   rf      s    
zall_hooks.<locals>.<genexpr>reposrh   r   r   r   r   	all_hooks   s   r   )r   r   r   r   )r   r   r   r    )r   r   r   r#   )r,   r	   r   r-   )r,   r	   r   r5   )rF   rG   rH   rG   r   rG   )rY   rG   rZ   r   rH   rG   r   r[   )rg   rw   rZ   r   r   r5   )rH   rG   rZ   r   r   r[   )+
__future__r   r'   loggingr   collections.abcr   typingr   pre_commit.constants	constantsrP   pre_commit.all_languagesr   pre_commit.clientlibr   r   r   pre_commit.hookr	   pre_commit.lang_baser
   pre_commit.prefixr   pre_commit.storer   pre_commit.utilr   r   	getLoggerr9   r   r   r"   r+   r4   rE   rX   rk   ru   rv   r   r   r   r   r   r   <module>   s<    





	

,
&

 
