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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dZdddMddZdddNddZdddNddZdOd!d"ZdOd#d$ZdPd&d'ZdQd)d*Z ej!dRd,d-Z"dSd0d1Z#ej!dTd3d4Z$dUd9d:Z%dVd;d<Z&dWd=d>Z'dXd@dAZ(dYdCdDZ)dZdEdFZ*d[dKdLZ+dS )\    )annotationsN)	Generator)Sequence)	lang_base)
envcontext)PatchesT)UNSET)Prefix)
cmd_output)win_exerenv)z	--no-savez--no-restorez--no-site-filez--no-environ )argscodestrprefixr	   versionr   Sequence[str]cwdcli_optsreturnc          	   	   C  s   t ||/ t| }tt g|||R d|i\}}}W d    n1 s(w   Y  W d    n1 s7w   Y  |dS )Nr   
)in_env_r_code_in_tempfiler
   _rscript_execrstrip)	r   r   r   r   r   r   f_outr   r   J/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/languages/r.py
_execute_r   s     
r    c                C  s   t | ||||tdS )Nr   r   r   r   r   r   )r    _RENV_ACTIVATED_OPTSr   r   r   r   r   r   r   r   _execute_r_in_renv(      
r$   c                C  s   t | ||||ddS )N)z	--vanillar!   )r    r#   r   r   r   _execute_vanilla_r2   r%   r&   envdirc                 C     t d||| dS )Nzcat(renv::settings$r.version())r   r   r   r$   r'   r   r   r   r   r   _read_installed_version<   
   r,   c                 C  r(   )Nz cat(as.character(getRversion()))r)   r*   r+   r   r   r   _read_executable_versionD   r-   r.   Nonec                 C  s   t d||| d d S )Nz5renv::settings$r.version(as.character(getRversion()))r)   r*   r+   r   r   r   _write_current_r_versionL   s
   
r0   
str | Nonec                 C  sX   t | t|}t|| |d}t|| |d}|dv rd| S ||kr*d| d| S d S )Nr+   >    NULLzSHooks were installed with an unknown R version. R version for hook repo now set to z#Hooks were installed for R version z', but current R executable has version )r   environment_dirENVIRONMENT_DIRr,   r.   )r   r   r'   r_version_installationr_version_current_executabler   r   r   health_checkV   s$   r8   Generator[str]c              	   c  s    t  2}tj|d}t|d}|tt	|  W d   n1 s'w   Y  |V  W d   dS 1 s:w   Y  dS )z
    To avoid quoting and escaping issues, avoid `Rscript [options] -e {expr}`
    but use `Rscript [options] path/to/file_with_expr.R`
    zscript.RwN)
tempfileTemporaryDirectoryospathjoinopenwrite_inline_r_setuptextwrapdedent)r   tmpdirfnamer   r   r   r   r   n   s   
"r   venvr   c                 C  s   dt j| dfdtffS )NR_PROFILE_USERz
activate.RRENV_PROJECT)r=   r>   r?   r   )rG   r   r   r   get_env_patch{   s   rJ   Generator[None]c                 c  sH    t | t|}tt| d V  W d    d S 1 sw   Y  d S )N)r   r4   r5   r   rJ   )r   r   r'   r   r   r   r      s
   "r   entry	list[str]is_localboolc                C  s,   | d dks|r| dd  S | | d fS )N   -e)r>   )rL   r   rN   r   r   r   _prefix_if_file_entry   s   rR   c                  C  s,   t jd} | d u rdS t j| dtdS )NR_HOMERscriptbin)r=   environgetr>   r?   r   )r_homer   r   r   r      s   r   c                 C  sP   | d dkr
t d| d dkrt| dkrt dd
S t| dkr&t d	d
S )zK
    Allowed entries:
    # Rscript -e expr
    # Rscript path/to/file
    r   rT   z entry must start with `Rscript`.rP   rQ      z&You can supply at most one expression.   zLThe only valid syntax is `Rscript -e {expr}`or `Rscript path/to/hook/script`N)
ValueErrorlen)rL   r   r   r   _entry_validate   s   r]   tuple[str, ...]c                C  s8   t |}t| t|| |d}|d gt||R S )NrN   r   )shlexsplitr]   rR   r"   )r   rL   r   rN   cmdcmd_partr   r   r   _cmd_from_hook   s   
rd   additional_dependenciesc                 C  s   t d| t | t|}tj|dd t| d| t	| dtj
|d d| jd}t|| ||d t|| |d	 |rPd
}t|| |||d d S d S )NrT)exist_okz	renv.lockr   z        prefix_dir <- a3  
        options(
            repos = c(CRAN = "https://cran.rstudio.com"),
            renv.consent = TRUE
        )
        source("renv/activate.R")
        renv::restore()
        activate_statement <- paste0(
          'suppressWarnings({',
          'old <- setwd("', getwd(), '"); ',
          'source("renv/activate.R"); ',
          'setwd(old); ',
          'renv::load("', getwd(), '");})'
        )
        writeLines(activate_statement, 'activate.R')
        is_package <- tryCatch(
          {
              path_desc <- file.path(prefix_dir, 'DESCRIPTION')
              suppressWarnings(desc <- read.dcf(path_desc))
              "Package" %in% colnames(desc)
          },
          error = function(...) FALSE
        )
        if (is_package) {
            renv::install(prefix_dir)
        }
        r)   r+   z/renv::install(commandArgs(trailingOnly = TRUE))r#   )r   assert_version_defaultr4   r5   r=   makedirsshutilcopyr>   copytreer?   
prefix_dirr&   r0   r$   )r   r   re   env_dirr_code_inst_environmentr_code_inst_addr   r   r   install_environment   s*   
rq   c                 C  s   t d| g}d|S )z
    Some behaviour of R cannot be configured via env variables, but can
    only be configured via R options once R has started. These are set here.
    z~        options(
            install.packages.compile.from.source = "never",
            pkgType = "binary"
        )
        r   )rC   rD   r?   )r   with_optionr   r   r   rB      s   
	rB   	file_argsrequire_serialcolortuple[int, bytes]c                C  s"   t | |||d}tj||||dS )Nr_   )rt   ru   )rd   r   	run_xargs)r   rL   r   rs   rN   rt   ru   rb   r   r   r   run_hook  s   
rx   )r   r   r   r	   r   r   r   r   r   r   r   r   r   r   )r   r   r   r	   r   r   r   r   r   r   r   r   )r'   r   r   r	   r   r   r   r   )r'   r   r   r	   r   r   r   r/   )r   r	   r   r   r   r1   )r   r   r   r9   )rG   r   r   r   )r   r	   r   r   r   rK   )rL   rM   r   r	   rN   rO   r   r   )r   r   )rL   rM   r   r/   )
r   r	   rL   r   r   r   rN   rO   r   r^   )r   r	   r   r   re   r   r   r/   )r   r   r   r   )r   r	   rL   r   r   r   rs   r   rN   rO   rt   rO   ru   rO   r   rv   ),
__future__r   
contextlibr=   r`   rj   r;   rC   collections.abcr   r   
pre_commitr   pre_commit.envcontextr   r   r   pre_commit.prefixr	   pre_commit.utilr
   r   r5   basic_get_default_versionget_default_versionr"   r    r$   r&   r,   r.   r0   r8   contextmanagerr   rJ   r   rR   r   r]   rd   rq   rB   rx   r   r   r   r   <module>   sR    












7