#' Activate a Project
#'
#' Use `activate()` to write the infrastructure needed to ensure that
#' newly-launched \R projects will load the project's private library on launch,
#' alongside any other project-specific state recorded for the project.
#'
#' @inheritParams renv-params
#'
#' @family renv
#'
#' @export
activate <- function(project = NULL) {
renv_scope_error_handler()
project <- project %||% renv_project()
renv_activate_impl(project, NULL)
}
renv_activate_impl <- function(project, version) {
# prepare renv infrastructure
renv_infrastructure_write(project, version)
renv_bootstrap_impl()
# set library paths now so that they're properly restored in new sessions
renv_load_libpaths(project)
# restart session
renv_request_restart(project, reason = "renv activated")
}
#' Deactivate a Project
#'
#' Use `deactivate()` to remove the infrastructure used by `renv` to activate
#' projects for newly-launched \R sessions. In particular, this implies removing
#' the requisite code from the project `.Rprofile` that automatically activates
#' the project when new \R sessions are launched in the project directory.
#'
#' @inheritParams renv-params
#'
#' @family renv
#'
#' @export
deactivate <- function(project = NULL) {
renv_scope_error_handler()
project <- project %||% renv_project()
renv_infrastructure_remove_rprofile(project)
renv_envvars_restore()
renv_request_restart(project, reason = "renv deactivated")
}
#' Load a Project
#'
#' Normally, this is done automatically on session startup by the infrastructure
#' generated by [activate()] -- users should not need to call this function
#' directly.
#'
#' @inheritParams renv-params
#'
#' @export
load <- function(project = NULL) {
renv_scope_error_handler()
project <- project %||% renv_project()
renv_envvars_save()
renv_load_renviron(project)
renv_load_project(project)
renv_load_profile(project)
renv_load_envvars(project)
renv_load_libpaths(project)
renv_load_sandbox(project)
lockfile <- renv_lockfile_load(project)
if (length(lockfile)) {
renv_load_r(lockfile$R)
renv_load_bioconductor(lockfile$Bioconductor)
renv_load_python(lockfile$Python)
}
renv_infrastructure_write(project)
renv_load_finish()
fmt <- "* Project '%s' loaded. [renv %s]"
vwritef(fmt, aliased_path(project), renv_package_version("renv"))
invisible(project)
}
renv_activate_version <- function(project) {
# try to get version from activate.R
methods <- list(
renv_activate_version_activate,
renv_activate_version_lockfile,
renv_activate_version_default
)
for (method in methods) {
version <- catch(method(project))
if (is.character(version))
return(version)
}
fmt <- "failed to determine renv version for project '%s'"
stopf(fmt, aliased_path(project))
}
renv_activate_version_activate <- function(project) {
activate <- file.path(project, "renv/activate.R")
if (!file.exists(activate))
return(NULL)
contents <- readLines(activate, warn = FALSE)
line <- grep("^\\s*version", contents, value = TRUE)
parsed <- parse(text = line)[[1]]
parsed[[3]]
}
renv_activate_version_lockfile <- function(project) {
path <- renv_lockfile_path(project)
if (!file.exists(path))
return(NULL)
lockfile <- renv_lockfile_read(path)
lockfile$renv$Version
}
renv_activate_version_default <- function(project) {
spec <- .getNamespaceInfo(.getNamespace("renv"), "spec")
spec[["version"]]
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.