o
    Wit                     @  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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"ej#ddd.ddZ$d/ddZ%d0ddZ&ej'd1d d!Z(d2d%d&Z)d3d)d*Z*d4d,d-Z+dS )5    )annotationsN)	Generator)Sequence)	lang_base)parse_shebang)
envcontext)PatchesT)Var)Prefix)cmd_output_b)make_executable)win_exerustenv   )maxsizereturnstrc                   C  s"   t dddddd dkrdS tjS )Ncargo	--versionF/)checkcwdr   system)r   CDEFAULT r   r   M/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/languages/rust.pyget_default_version   s   r   language_versionc                 C  s   | t jkrdS | S )z=Transform the language version into a rust toolchain version.stable)r   r   )r   r   r   r   _rust_toolchain+   s   
r    
target_dirversionr   c                 C  s@   dt j| dt jtdffg|dkrdt|ffR S dR S )NPATHbinr   RUSTUP_TOOLCHAINr   )ospathjoinpathsepr	   r    )r!   r"   r   r   r   get_env_patch3   s   r*   prefixr
   Generator[None]c                 c  sJ    t | t|}tt|| d V  W d    d S 1 sw   Y  d S )N)r   environment_dirENVIRONMENT_DIRr   r*   )r+   r"   envdirr   r   r   in_env?   s
   "r0   additional_dependenciesset[str]Nonec                 C  sT   g }|D ]}| d\}}}| d|pd }|| qt| ddg|R  d S )N:@*r   add)	partitionappendr   	setup_cmd)r+   r1   cratesdepname_speccrater   r   r   _add_dependenciesF   s   rA   	toolchainr/   c              
   C  s  t  {}td|fd|ffX tdd u rXtjdkrd}nd}tj	|}t
j|td}t|d}t|| W d    n1 sFw   Y  t| t|d	d
ddd tdddd|  W d    n1 sjw   Y  W d    d S W d    d S 1 sw   Y  d S )N
CARGO_HOMERUSTUP_HOMErustupwin32zhttps://win.rustup.rs/x86_64zhttps://sh.rustup.rszrustup-initwbz-yz--quietz--no-modify-pathz--default-toolchainnonerB   installz--no-self-update)tempfileTemporaryDirectoryr   r   find_executablesysplatformurllibrequesturlopenr&   r'   r(   r   openshutilcopyfileobjr   r   )rB   r/   
rustup_dirurlresprustup_initfr   r   r   install_rust_with_toolchainS   s0   

"rZ   Sequence[str]c                 C  s.  t | t|}dd |D }t|| }dh}|D ]"}|d}|d\}}	}
|
dkr5||d|
f q||f qt M}|	t
| | |dkrett|| |	t }|	td	|ff t|d
krpt| | |D ]}tdddd|g|R d| ji qrW d    d S 1 sw   Y  d S )Nc                 S  s   h | ]	}| d r|qS )cli:)
startswith).0r<   r   r   r   	<setcomp>   s
    
z&install_environment.<locals>.<setcomp>)z--path.r\   r4    r   r   rD   r   r   rI   z--binsz--rootr   )r   r-   r.   setremoveprefixr8   r7   
contextlib	ExitStackenter_contextr0   rZ   r    rJ   rK   r   lenrA   r   
prefix_dir)r+   r"   r1   r/   cli_depslib_depspackages_to_installcli_deppackager>   crate_versionctxtmpdirargsr   r   r   install_environmentq   s<   



"rr   )r   r   )r   r   r   r   )r!   r   r"   r   r   r   )r+   r
   r"   r   r   r,   )r+   r
   r1   r2   r   r3   )rB   r   r/   r   r   r3   )r+   r
   r"   r   r1   r[   r   r3   ),
__future__r   rd   	functoolsos.pathr&   rS   rM   rJ   urllib.requestrO   collections.abcr   r   pre_commit.constants	constantsr   
pre_commitr   r   pre_commit.envcontextr   r   r	   pre_commit.prefixr
   pre_commit.utilr   r   r   r.   basic_health_checkhealth_checkbasic_run_hookrun_hook	lru_cacher   r    r*   contextmanagerr0   rA   rZ   rr   r   r   r   r   <module>   s@    




