[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file
Jan Górecki
J.Gorecki at wit.edu.pl
Tue Jun 14 16:54:28 CEST 2016
Hi all,
Packages tools and utils have a lot of useful stuff for R developers.
I find one task still not as straightforward as it could. Simply to
extract dependencies of a package from DESCRIPTION file (before it is
even installed to library). This would be valuable in automation of CI
setup in a more meta-data driven way.
The simple function below, I know it is short and simple, but having
it to be defined in each CI workflow is a pain, it could be already
available in tools or utils namespace.
package.dependencies.dcf <- function(file = "DESCRIPTION", which =
c("Depends","Imports","LinkingTo")) {
stopifnot(file.exists(file), is.character(which))
which_all <- c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances")
if (identical(which, "all"))
which <- which_all
else if (identical(which, "most"))
which <- c("Depends", "Imports", "LinkingTo", "Suggests")
stopifnot(which %in% which_all)
dcf <- read.dcf(file, which)
# parse fields
raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed = TRUE))
# strip stated dependency version
deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed =
TRUE), `[[`, 1L))
# exclude base R pkgs
base.pkgs <- c("R", rownames(installed.packages(priority = "base")))
setdiff(deps, base.pkgs)
}
This allows to easily install all package dependencies just based on
DESCRIPTION file, so simplify that in custom CI workflows to:
if (length(pkgs<-package.dependencies.dcf(which="all"))) install.packages(pkgs)
And would not require to install custom packages or shell scripts.
Regards,
Jan Gorecki
More information about the R-devel
mailing list