mirror of
https://github.com/agdamsbo/prioritized.grouping.git
synced 2026-06-19 05:47:30 +02:00
major update and first official launch. CRAN is waiting.
Some checks are pending
pkgdown.yaml / pkgdown (push) Waiting to run
Some checks are pending
pkgdown.yaml / pkgdown (push) Waiting to run
This commit is contained in:
parent
464b842629
commit
3b035ab06f
218 changed files with 1758 additions and 410523 deletions
181
renv/activate.R
181
renv/activate.R
|
|
@ -2,11 +2,13 @@
|
|||
local({
|
||||
|
||||
# the requested version of renv
|
||||
version <- "1.0.3"
|
||||
version <- "1.0.10"
|
||||
attr(version, "sha") <- NULL
|
||||
|
||||
# the project directory
|
||||
project <- getwd()
|
||||
project <- Sys.getenv("RENV_PROJECT")
|
||||
if (!nzchar(project))
|
||||
project <- getwd()
|
||||
|
||||
# use start-up diagnostics if enabled
|
||||
diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE")
|
||||
|
|
@ -31,6 +33,14 @@ local({
|
|||
if (!is.null(override))
|
||||
return(override)
|
||||
|
||||
# if we're being run in a context where R_LIBS is already set,
|
||||
# don't load -- presumably we're being run as a sub-process and
|
||||
# the parent process has already set up library paths for us
|
||||
rcmd <- Sys.getenv("R_CMD", unset = NA)
|
||||
rlibs <- Sys.getenv("R_LIBS", unset = NA)
|
||||
if (!is.na(rlibs) && !is.na(rcmd))
|
||||
return(FALSE)
|
||||
|
||||
# next, check environment variables
|
||||
# TODO: prefer using the configuration one in the future
|
||||
envvars <- c(
|
||||
|
|
@ -50,9 +60,22 @@ local({
|
|||
|
||||
})
|
||||
|
||||
if (!enabled)
|
||||
# bail if we're not enabled
|
||||
if (!enabled) {
|
||||
|
||||
# if we're not enabled, we might still need to manually load
|
||||
# the user profile here
|
||||
profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile")
|
||||
if (file.exists(profile)) {
|
||||
cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE")
|
||||
if (tolower(cfg) %in% c("true", "t", "1"))
|
||||
sys.source(profile, envir = globalenv())
|
||||
}
|
||||
|
||||
return(FALSE)
|
||||
|
||||
}
|
||||
|
||||
# avoid recursion
|
||||
if (identical(getOption("renv.autoloader.running"), TRUE)) {
|
||||
warning("ignoring recursive attempt to run renv autoloader")
|
||||
|
|
@ -75,6 +98,66 @@ local({
|
|||
unloadNamespace("renv")
|
||||
|
||||
# load bootstrap tools
|
||||
ansify <- function(text) {
|
||||
if (renv_ansify_enabled())
|
||||
renv_ansify_enhanced(text)
|
||||
else
|
||||
renv_ansify_default(text)
|
||||
}
|
||||
|
||||
renv_ansify_enabled <- function() {
|
||||
|
||||
override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA)
|
||||
if (!is.na(override))
|
||||
return(as.logical(override))
|
||||
|
||||
pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA)
|
||||
if (identical(pane, "build"))
|
||||
return(FALSE)
|
||||
|
||||
testthat <- Sys.getenv("TESTTHAT", unset = "false")
|
||||
if (tolower(testthat) %in% "true")
|
||||
return(FALSE)
|
||||
|
||||
iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false")
|
||||
if (tolower(iderun) %in% "false")
|
||||
return(FALSE)
|
||||
|
||||
TRUE
|
||||
|
||||
}
|
||||
|
||||
renv_ansify_default <- function(text) {
|
||||
text
|
||||
}
|
||||
|
||||
renv_ansify_enhanced <- function(text) {
|
||||
|
||||
# R help links
|
||||
pattern <- "`\\?(renv::(?:[^`])+)`"
|
||||
replacement <- "`\033]8;;ide:help:\\1\a?\\1\033]8;;\a`"
|
||||
text <- gsub(pattern, replacement, text, perl = TRUE)
|
||||
|
||||
# runnable code
|
||||
pattern <- "`(renv::(?:[^`])+)`"
|
||||
replacement <- "`\033]8;;ide:run:\\1\a\\1\033]8;;\a`"
|
||||
text <- gsub(pattern, replacement, text, perl = TRUE)
|
||||
|
||||
# return ansified text
|
||||
text
|
||||
|
||||
}
|
||||
|
||||
renv_ansify_init <- function() {
|
||||
|
||||
envir <- renv_envir_self()
|
||||
if (renv_ansify_enabled())
|
||||
assign("ansify", renv_ansify_enhanced, envir = envir)
|
||||
else
|
||||
assign("ansify", renv_ansify_default, envir = envir)
|
||||
|
||||
}
|
||||
|
||||
`%||%` <- function(x, y) {
|
||||
if (is.null(x)) y else x
|
||||
}
|
||||
|
|
@ -108,6 +191,24 @@ local({
|
|||
|
||||
}
|
||||
|
||||
heredoc <- function(text, leave = 0) {
|
||||
|
||||
# remove leading, trailing whitespace
|
||||
trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text)
|
||||
|
||||
# split into lines
|
||||
lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]]
|
||||
|
||||
# compute common indent
|
||||
indent <- regexpr("[^[:space:]]", lines)
|
||||
common <- min(setdiff(indent, -1L)) - leave
|
||||
text <- paste(substring(lines, common), collapse = "\n")
|
||||
|
||||
# substitute in ANSI links for executable renv code
|
||||
ansify(text)
|
||||
|
||||
}
|
||||
|
||||
startswith <- function(string, prefix) {
|
||||
substring(string, 1, nchar(prefix)) == prefix
|
||||
}
|
||||
|
|
@ -268,7 +369,11 @@ local({
|
|||
)
|
||||
|
||||
if ("headers" %in% names(formals(utils::download.file)))
|
||||
args$headers <- renv_bootstrap_download_custom_headers(url)
|
||||
{
|
||||
headers <- renv_bootstrap_download_custom_headers(url)
|
||||
if (length(headers) && is.character(headers))
|
||||
args$headers <- headers
|
||||
}
|
||||
|
||||
do.call(utils::download.file, args)
|
||||
|
||||
|
|
@ -347,10 +452,22 @@ local({
|
|||
for (type in types) {
|
||||
for (repos in renv_bootstrap_repos()) {
|
||||
|
||||
# build arguments for utils::available.packages() call
|
||||
args <- list(type = type, repos = repos)
|
||||
|
||||
# add custom headers if available -- note that
|
||||
# utils::available.packages() will pass this to download.file()
|
||||
if ("headers" %in% names(formals(utils::download.file)))
|
||||
{
|
||||
headers <- renv_bootstrap_download_custom_headers(url)
|
||||
if (length(headers) && is.character(headers))
|
||||
args$headers <- headers
|
||||
}
|
||||
|
||||
# retrieve package database
|
||||
db <- tryCatch(
|
||||
as.data.frame(
|
||||
utils::available.packages(type = type, repos = repos),
|
||||
do.call(utils::available.packages, args),
|
||||
stringsAsFactors = FALSE
|
||||
),
|
||||
error = identity
|
||||
|
|
@ -432,6 +549,14 @@ local({
|
|||
|
||||
}
|
||||
|
||||
renv_bootstrap_github_token <- function() {
|
||||
for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) {
|
||||
envval <- Sys.getenv(envvar, unset = NA)
|
||||
if (!is.na(envval))
|
||||
return(envval)
|
||||
}
|
||||
}
|
||||
|
||||
renv_bootstrap_download_github <- function(version) {
|
||||
|
||||
enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE")
|
||||
|
|
@ -439,16 +564,16 @@ local({
|
|||
return(FALSE)
|
||||
|
||||
# prepare download options
|
||||
pat <- Sys.getenv("GITHUB_PAT")
|
||||
if (nzchar(Sys.which("curl")) && nzchar(pat)) {
|
||||
token <- renv_bootstrap_github_token()
|
||||
if (nzchar(Sys.which("curl")) && nzchar(token)) {
|
||||
fmt <- "--location --fail --header \"Authorization: token %s\""
|
||||
extra <- sprintf(fmt, pat)
|
||||
extra <- sprintf(fmt, token)
|
||||
saved <- options("download.file.method", "download.file.extra")
|
||||
options(download.file.method = "curl", download.file.extra = extra)
|
||||
on.exit(do.call(base::options, saved), add = TRUE)
|
||||
} else if (nzchar(Sys.which("wget")) && nzchar(pat)) {
|
||||
} else if (nzchar(Sys.which("wget")) && nzchar(token)) {
|
||||
fmt <- "--header=\"Authorization: token %s\""
|
||||
extra <- sprintf(fmt, pat)
|
||||
extra <- sprintf(fmt, token)
|
||||
saved <- options("download.file.method", "download.file.extra")
|
||||
options(download.file.method = "wget", download.file.extra = extra)
|
||||
on.exit(do.call(base::options, saved), add = TRUE)
|
||||
|
|
@ -610,6 +735,9 @@ local({
|
|||
|
||||
# if the user has requested an automatic prefix, generate it
|
||||
auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA)
|
||||
if (is.na(auto) && getRversion() >= "4.4.0")
|
||||
auto <- "TRUE"
|
||||
|
||||
if (auto %in% c("TRUE", "True", "true", "1"))
|
||||
return(renv_bootstrap_platform_prefix_auto())
|
||||
|
||||
|
|
@ -801,24 +929,23 @@ local({
|
|||
|
||||
# the loaded version of renv doesn't match the requested version;
|
||||
# give the user instructions on how to proceed
|
||||
remote <- if (!is.null(description[["RemoteSha"]])) {
|
||||
dev <- identical(description[["RemoteType"]], "github")
|
||||
remote <- if (dev)
|
||||
paste("rstudio/renv", description[["RemoteSha"]], sep = "@")
|
||||
} else {
|
||||
else
|
||||
paste("renv", description[["Version"]], sep = "@")
|
||||
}
|
||||
|
||||
# display both loaded version + sha if available
|
||||
friendly <- renv_bootstrap_version_friendly(
|
||||
version = description[["Version"]],
|
||||
sha = description[["RemoteSha"]]
|
||||
sha = if (dev) description[["RemoteSha"]]
|
||||
)
|
||||
|
||||
fmt <- paste(
|
||||
"renv %1$s was loaded from project library, but this project is configured to use renv %2$s.",
|
||||
"- Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.",
|
||||
"- Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.",
|
||||
sep = "\n"
|
||||
)
|
||||
fmt <- heredoc("
|
||||
renv %1$s was loaded from project library, but this project is configured to use renv %2$s.
|
||||
- Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.
|
||||
- Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.
|
||||
")
|
||||
catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote)
|
||||
|
||||
FALSE
|
||||
|
|
@ -1041,7 +1168,7 @@ local({
|
|||
# if jsonlite is loaded, use that instead
|
||||
if ("jsonlite" %in% loadedNamespaces()) {
|
||||
|
||||
json <- catch(renv_json_read_jsonlite(file, text))
|
||||
json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity)
|
||||
if (!inherits(json, "error"))
|
||||
return(json)
|
||||
|
||||
|
|
@ -1050,7 +1177,7 @@ local({
|
|||
}
|
||||
|
||||
# otherwise, fall back to the default JSON reader
|
||||
json <- catch(renv_json_read_default(file, text))
|
||||
json <- tryCatch(renv_json_read_default(file, text), error = identity)
|
||||
if (!inherits(json, "error"))
|
||||
return(json)
|
||||
|
||||
|
|
@ -1063,14 +1190,14 @@ local({
|
|||
}
|
||||
|
||||
renv_json_read_jsonlite <- function(file = NULL, text = NULL) {
|
||||
text <- paste(text %||% read(file), collapse = "\n")
|
||||
text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n")
|
||||
jsonlite::fromJSON(txt = text, simplifyVector = FALSE)
|
||||
}
|
||||
|
||||
renv_json_read_default <- function(file = NULL, text = NULL) {
|
||||
|
||||
# find strings in the JSON
|
||||
text <- paste(text %||% read(file), collapse = "\n")
|
||||
text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n")
|
||||
pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||
locs <- gregexpr(pattern, text, perl = TRUE)[[1]]
|
||||
|
||||
|
|
@ -1118,14 +1245,14 @@ local({
|
|||
map <- as.list(map)
|
||||
|
||||
# remap strings in object
|
||||
remapped <- renv_json_remap(json, map)
|
||||
remapped <- renv_json_read_remap(json, map)
|
||||
|
||||
# evaluate
|
||||
eval(remapped, envir = baseenv())
|
||||
|
||||
}
|
||||
|
||||
renv_json_remap <- function(json, map) {
|
||||
renv_json_read_remap <- function(json, map) {
|
||||
|
||||
# fix names
|
||||
if (!is.null(names(json))) {
|
||||
|
|
@ -1152,7 +1279,7 @@ local({
|
|||
# recurse
|
||||
if (is.recursive(json)) {
|
||||
for (i in seq_along(json)) {
|
||||
json[i] <- list(renv_json_remap(json[[i]], map))
|
||||
json[i] <- list(renv_json_read_remap(json[[i]], map))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"ppm.enabled": null,
|
||||
"ppm.ignored.urls": [],
|
||||
"r.version": null,
|
||||
"snapshot.type": "implicit",
|
||||
"snapshot.type": "explicit",
|
||||
"use.cache": true,
|
||||
"vcs.ignore.cellar": true,
|
||||
"vcs.ignore.library": true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue