o
    Wi                     @  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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Z'ej(Z)ej*Z+ddddddZ,e- . Z/e,0e/e/Z/G dd deZ1e	jdkrdZ2d=ddZ3nd Z2d=d!dZ3ej4d"d#d>d%d&Z5d?d*d+Z6ej4d@d,d-Z7d@d.d/Z8dAd2d3Z9ej:dBd7d8Z;dCd;d<Z<dS )D    )annotationsN)	Generator)Sequence)ContextManager)IO)Protocol)	lang_base)
envcontext)PatchesT)Var)
no_git_env)Prefix)
cmd_output)rmtree	golangenvamd64386arm64armv6l)x86_64i386aarch64armv8armv7lc                   @  s   e Zd ZdddZdS )	
ExtractAllpathstrreturnNonec                 C  s   d S N )selfr   r    r    O/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/languages/golang.py
extractall/   s    zExtractAll.extractallN)r   r   r   r   )__name__
__module____qualname__r#   r    r    r    r"   r   .   s    r   win32zipbio	IO[bytes]r   ContextManager[ExtractAll]c                 C  s
   t | S r   )zipfileZipFiler)   r    r    r"   _open_archive5   s   
r/   ztar.gzc                 C  s   t j| dS )N)fileobj)tarfileopenr.   r    r    r"   r/   :   s      )maxsizer   c                   C  s   t drdS tjS )Ngosystem)r   
exe_existsCDEFAULTr    r    r    r"   get_default_version>   s   
r:   venvversionr
   c              
   C  sl   |dkrdt j| dt jtdfffS dt j| dfddt j| dt jt j| ddt jtdfffS )Nr6   PATHbinGOROOT.go)GOTOOLCHAINlocal)osr   joinpathsepr   )r;   r<   r    r    r"   get_env_patchF   s   rF   c                 C  s2   | t jkr| S tjd}t|d d dS )Nzhttps://go.dev/dl/?mode=jsonr   r<   r5   )r8   r9   urllibrequesturlopenjsonloadremoveprefix)r<   respr    r    r"   _infer_go_versionX   s   
rN   c                 C  s0   t   }t| } d|  d| dt dt S )Nzhttps://dl.google.com/go/go.-)platformr6   lowerrN   _ARCH_EXT)r<   os_namer    r    r"   _get_url`   s   rV   destr   c              
   C  s   z
t jt| }W n$ t jjy. } z|jdkr)tdt	 
  dt d| d }~ww t ,}t|| |d t|}|| W d    n1 sSw   Y  W d    n1 sbw   Y  ttj|dtj|d d S )Ni  z?Could not find a version matching your system requirements (os=z; arch=)r   r5   r@   )rG   rH   rI   rV   error	HTTPErrorcode
ValueErrorrQ   r6   rR   rS   tempfileTemporaryFileshutilcopyfileobjseekr/   r#   moverC   r   rD   )r<   rW   rM   efarchiver    r    r"   _install_gof   s2   


	

$rf   prefixr   Generator[None]c                 c  sJ    t | t|}tt|| d V  W d    d S 1 sw   Y  d S r   )r   environment_dirENVIRONMENT_DIRr	   rF   )rg   r<   envdirr    r    r"   in_env{   s
   "rl   additional_dependenciesSequence[str]c                 C  s  t | t|}|dkrt|| tjdkr tdd|d  }n|}tt	t
j|d}|dd  |dkrUd|d	< t
j|d
|d< t
jt
j|d
dt
jd f|d< t j| d|d |D ]}t j| dd|f|d q_t
j|d}t
j|rt| d S d S )Nr6   cygwincygpathz-wr3   )GOPATHGOBINrB   rA   r@   r?   r>   r=   )r5   installz./...)envr5   rs   pkg)r   ri   rj   rf   sysrQ   r   stripr   dictrC   environpopr   rD   rE   	setup_cmdexistsr   )rg   r<   rm   env_dirgopathrt   
dependencypkgdirr    r    r"   install_environment   s*   


r   )r)   r*   r   r+   )r   r   )r;   r   r<   r   r   r
   )r<   r   r   r   )r<   r   rW   r   r   r   )rg   r   r<   r   r   rh   )rg   r   r<   r   rm   rn   r   r   )=
__future__r   
contextlib	functoolsrJ   os.pathrC   rQ   r_   rv   r1   r]   urllib.errorrG   urllib.requestr,   collections.abcr   r   typingr   r   r   pre_commit.constants	constantsr8   
pre_commitr   pre_commit.envcontextr	   r
   r   pre_commit.gitr   pre_commit.prefixr   pre_commit.utilr   r   rj   basic_health_checkhealth_checkbasic_run_hookrun_hook_ARCH_ALIASESmachinerR   rS   getr   rT   r/   	lru_cacher:   rF   rN   rV   rf   contextmanagerrl   r   r    r    r    r"   <module>   sl    





