U e^@stddlmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZdZejZ ej!Z"ej#ddddddZ$dddddZ%ddddddZ&ej'dddddd Z(dd!d"d#d$d%Z)ddd"d&d'd(Z*ddd)d"d*d+d,Z+dS)-) annotationsN) Generator)Sequence) lang_base) parse_shebang) envcontext)PatchesT)Var)Prefix) cmd_output_b)make_executable)win_exeZrustenv)maxsizestr)returncCs$tddddddkrdStjSdS)Ncargo --versionF)checkrsystem)r CDEFAULTrrG/opt/hc_python/lib/python3.8/site-packages/pre_commit/languages/rust.pyget_default_versionsr)language_versionrcCs|tjkrdS|SdS)z=Transform the language version into a rust toolchain version.ZstableN)rr)rrrr_rust_toolchain+s rr) target_dirversionrcCs:dtj|dtjtdfff|dkr4dt|ffndS)NPATHbinrZRUSTUP_TOOLCHAINr)ospathjoinpathsepr r)rrrrr get_env_patch3s r%r zGenerator[(None, None, None)])prefixrrc cs2t|t|}tt|| dVW5QRXdS)N)renvironment_dirENVIRONMENT_DIRrr%)r&renvdirrrrin_env?sr*zset[str]None)r&additional_dependenciesrcCsNg}|D]0}|d\}}}|d|p(d}||qt|d|dS)N:@*radd)rr0) partitionappendrZ setup_cmd)r&r,Zcratesdepname_specZcraterrr_add_dependenciesFs  r7) toolchainr)rc Cst}td|fd|fftddkrtjdkr>d}nd}tj |}t j |t d}t|d}t||W5QRXt|t|d d d d d tdddd|W5QRXW5QRXdS)NZ CARGO_HOME RUSTUP_HOMEZrustupwin32zhttps://win.rustup.rs/x86_64zhttps://sh.rustup.rsz rustup-initwbz-yz--quietz--no-modify-pathz--default-toolchainnoner8installz--no-self-update)tempfileTemporaryDirectoryrrfind_executablesysplatformurllibrequesturlopenr!r"r#r openshutil copyfileobjr r )r8r)Z rustup_dirurlrespZ rustup_initfrrrinstall_rust_with_toolchainSs4    rLz Sequence[str])r&rr,rc Cst|t|}dd|D}t||}dh}|D]J}|tdd}|d\}} } | dkrp||d| fq2||fq2t} | t |||dkrt t ||| t } | td | fft|d krt|||D]"} td d d d|f| d|jiqW5QRXdS)NcSsh|]}|dr|qS)cli:) startswith).0r3rrr s z&install_environment..)z--path.rMr-rrr9rrr=z--binsz--rootcwd)rr'r(setlenr1r0 contextlib ExitStack enter_contextr*rLrr>r?rr7r Z prefix_dir)r&rr,r)Zcli_depsZlib_depsZpackages_to_installZcli_deppackager5Z crate_versionctxZtmpdirargsrrrinstall_environmentqs@     r\), __future__rrV functoolsos.pathr!rGrAr>urllib.requestrCtypingrrZpre_commit.constants constantsrZ pre_commitrrZpre_commit.envcontextrrr Zpre_commit.prefixr Zpre_commit.utilr r r r(Zbasic_health_checkZ health_checkZbasic_run_hookZrun_hook lru_cacherrr%contextmanagerr*r7rLr\rrrrs>