U e @sddlmZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddl m Z ddl mZddl mZddl mZdd lmZdd lmZdd lmZd Zd Ze jZe jZejdddddZdddddZejddddddZdddddd d!Z dd"d#d$Z!dd%d&d'd(Z"ddddd)d*d+d,Z#dddd%d-d.d/Z$dddd0d1Z%dddddddd2d3d4d5Z&dS)6) annotationsN) Generator)Sequence) lang_base) envcontext)PatchesT)UNSET)Prefix) cmd_output_b)win_exerenv)z --no-savez --no-restorez--no-site-filez --no-environstrzGenerator[str, None, None])codereturnc csVtD}tj|d}t|d}|tt |W5QRX|VW5QRXdS)z To avoid quoting and escaping issues, avoid `Rscript [options] -e {expr}` but use `Rscript [options] path/to/file_with_expr.R` zscript.RwN) tempfileTemporaryDirectoryospathjoinopenwrite_inline_r_setuptextwrapdedent)rZtmpdirfnamefrD/opt/hc_python/lib/python3.8/site-packages/pre_commit/languages/r.py_r_code_in_tempfiles   rr)venvrcCsdtj|dfdtffS)NZR_PROFILE_USERz activate.RZ RENV_PROJECT)rrrr)r rrr get_env_patch'sr!r zGenerator[(None, None, None)])prefixversionrc cs0t|t|}tt| dVW5QRXdS)N)renvironment_dirENVIRONMENT_DIRrr!)r"r#Zenvdirrrrin_env.sr&z list[str]boolz Sequence[str])entryr"is_localrcCs0|ddks|r|ddS||dfSdS)N-e)r)r(r"r)rrr_prefix_if_file_entry5s r,)rcCs0tjd}|dkrdStj|dtdSdS)NZR_HOMERscriptbin)renvirongetrrr )Zr_homerrr _rscript_execAs r1None)r(rcCsN|ddkrtd|ddkr6t|dkrJtdnt|dkrJtd d S) zK Allowed entries: # Rscript -e expr # Rscript path/to/file rr-z entry must start with `Rscript`.r*r+z&You can supply at most one expression.zLThe only valid syntax is `Rscript -e {expr}`or `Rscript path/to/hook/script`N) ValueErrorlen)r(rrr_entry_validateIs     r7ztuple[str, ...])r"r(argsr)rcCs2t|}t|t|||d}|dft||S)Nr)r)shlexsplitr7r, RSCRIPT_OPTS)r"r(r8r)cmdZcmd_partrrr_cmd_from_hook\s r>)r"r#additional_dependenciesrc Cstd|t|t|}tj|ddt|d|t |dtj |dd|j d}t |}t td||d W5QRX|rd }t||6t |"}t tft|f|d |iW5QRXW5QRXdS) NrT)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) } z --vanilla)cwdz/renv::install(commandArgs(trailingOnly = TRUE))rB)rZassert_version_defaultr$r%rmakedirsshutilcopyrcopytreerZ prefix_dirrr r1r&r<)r"r#r?Zenv_dirZr_code_inst_environmentrZr_code_inst_addrrrinstall_environmentjs,    rGcCstd|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" )  )rrr)rZ with_optionrrrrs rztuple[int, bytes])r"r(r8 file_argsr)require_serialcolorrcCs"t||||d}tj||||dS)Nr9)rJrK)r>rZ run_xargs)r"r(r8rIr)rJrKr=rrrrun_hooks rL)' __future__r contextlibrr:rDrrtypingrrZ pre_commitrZpre_commit.envcontextrrrZpre_commit.prefixr Zpre_commit.utilr r r%r<Zbasic_get_default_versionZget_default_versionZbasic_health_checkZ health_checkcontextmanagerrr!r&r,r1r7r>rGrrLrrrrs>            8