R/bioconductor.R

Defines functions renv_bioconductor_repos renv_bioconductor_version renv_bioconductor_init_biocinstaller renv_bioconductor_init_biocmanager renv_bioconductor_init

renv_bioconductor_init <- function() {
  if (getRversion() >= "3.5.0")
    renv_bioconductor_init_biocmanager()
  else
    renv_bioconductor_init_biocinstaller()
}

renv_bioconductor_init_biocmanager <- function() {

  if (renv_package_available("BiocManager"))
    return(TRUE)

  install("BiocManager")
  TRUE

}

renv_bioconductor_init_biocinstaller <- function() {

  if (renv_package_available("BiocInstaller"))
    return(TRUE)

  url <- "https://bioconductor.org/biocLite.R"
  destfile <- tempfile("renv-bioclite-", fileext = ".R")
  on.exit(unlink(destfile), add = TRUE)
  download(url, destfile = destfile, quiet = TRUE)

  source(destfile)
  TRUE

}

renv_bioconductor_version <- function() {

  if (renv_package_available("BiocManager")) {
    BiocManager <- asNamespace("BiocManager")
    format(BiocManager$version())
  } else if (renv_package_available("BiocInstaller")) {
    BiocInstaller <- asNamespace("BiocInstaller")
    format(BiocInstaller$biocVersion())
  } else if (renv_package_available("BiocVersion")) {
    format(packageVersion("BiocVersion")[1, 1:2])
  }

}

renv_bioconductor_repos <- function(version = NULL) {

  # allow bioconductor repos override
  repos <- getOption("renv.bioconductor.repos")
  if (!is.null(repos))
    return(repos)

  # read Bioconductor version (normally set during restore)
  version <- version %||% getOption("renv.bioconductor.version")

  # try both BiocManager, BiocInstaller to get Bioconductor repositories
  getters <- list(

    BiocManager = function() {
      BiocManager <- asNamespace("BiocManager")
      version <- version %||% BiocManager$version()
      BiocManager$repositories(version = version)
    },

    BiocInstaller = function() {
      BiocInstaller <- asNamespace("BiocInstaller")
      version <- version %||% BiocInstaller$biocVersion()
      BiocInstaller$biocinstallRepos(version = version)
    }

  )

  # prefer BiocInstaller for older versions of R
  if (getRversion() < "3.5.0")
    getters <- rev(getters)

  # now, try asking the packages for the active repositories
  for (getter in getters) {
    repos <- catch(getter())
    if (!inherits(repos, "error"))
      return(repos)
  }

  stopf("failed to determine Bioconductor repositories")

}
wnattt/renv documentation built on Dec. 23, 2021, 5:19 p.m.