Nothing
##' Enqueue package for subsequent reverse-dependency check
##'
##' This function relies on the \code{\link{available.packages}} function from R
##' along with the \code{liteq} package. The \code{getQueueFile} function is used to
##' determine the queue file directory and name.
##' @title Enqueues reverse-dependent packages
##' @param package A character variable denoting a package
##' @param directory A character variable denoting a directory
##' @param dbfile Optional character with path to previous runs db file
##' @param addfailed Optional logical swith to add previous failures
##' @return A queue is create as a side effect, its elements are returned invisibly
##' @author Dirk Eddelbuettel
##' @examples
##' \dontrun{
##' td <- tempdir()
##' options(repos=c(CRAN="https://cloud.r-project.org"))
##' jobsdf <- enqueueJobs(package="digest", directory=td)
##' }
enqueueJobs <- function(package, directory, dbfile="", addfailed=FALSE) {
if (!is.null(cfg <- getConfig())) {
if ("setup" %in% names(cfg)) source(cfg$setup)
if ("libdir" %in% names(cfg)) {
fullLibDir <- normalizePath(cfg$libdir)
.libPaths(fullLibDir)
Sys.setenv("R_LIBS_USER"=fullLibDir)
if (!dir.exists(fullLibDir)) {
dir.create(fullLibDir)
}
}
}
runEnqueueSanityChecks() # currenly repos only
if (dbfile != "") {
if (file.exists(dbfile)) {
db <- dbfile
} else {
stop("No file ", dbfile, " found\n", call. = FALSE)
}
con <- getDatabaseConnection(db) # we re-use the liteq db for our results
res <- setDT(dbGetQuery(con, "select * from results"))
dbDisconnect(con)
}
## available package at CRAN and/or elsewhere
## use cfg$setup to override/extend with additional (local) repos
AP <- available.packages(filters=list())
pkgset <- dependsOnPkgs(package, recursive=FALSE, installed=AP)
if (length(pkgset) == 0) stop("No dependencies for ", package, call. = FALSE)
AP <- setDT(as.data.frame(AP))
if (dbfile == "") {
pkgset <- data.table(Package=pkgset)
} else {
newpkgs <- setdiff(pkgset, res$package)
if (addfailed) {
failed <- res[ result != 0, .(Package = package)]
failed <- AP[failed, on="Package"][!is.na(Version)]
pkgset <- data.table(Package=unique(sort(c(failed$Package, newpkgs))))
} else {
pkgset <- data.table(Package=newpkgs)
}
}
work <- AP[pkgset, on="Package"][,1:2]
db <- getQueueFile(package=package, path=directory)
q <- ensure_queue("jobs", db = db)
## next line just to check .libPaths(), not needed here
#IP <- installed.packages(filters=list())
con <- getDatabaseConnection(db) # we re-use the liteq db for our results
createRunDataTable(con)
dat <- data.frame(package=package,
version=format(packageVersion(package)),
date=format(Sys.Date()))
dbWriteTable(con, "metadata", dat, append=TRUE)
dbDisconnect(con)
n <- nrow(work)
for (i in 1:n) {
ttl <- paste0(work[i,Package])
msg <- paste(work[i,Package], work[i, Version], sep="_")
publish(q, title = ttl, message = msg)
}
list_messages(q)
}
##' @rdname enqueueJobs
enqueueDepends <- function(package, directory) {
if (!is.null(cfg <- getConfig())) {
if ("setup" %in% names(cfg)) source(cfg$setup)
if ("libdir" %in% names(cfg)) {
fullLibDir <- normalizePath(cfg$libdir)
.libPaths(fullLibDir)
Sys.setenv("R_LIBS_USER"=fullLibDir)
if (!dir.exists(fullLibDir)) {
dir.create(fullLibDir)
}
}
}
## available package at CRAN and/or elsewhere
## use cfg$setup to override/extend with additional (local) repos
AP <- available.packages(filters=list())
pkgset <- dependsOnPkgs(package, recursive=FALSE, installed=AP)
AP <- setDT(as.data.frame(AP))
pkgset <- setDT(data.frame(Package=pkgset))
work <- AP[pkgset, on="Package"][,1:2]
deplst <- package_dependencies(as.character(work[[1]]), db=as.matrix(AP), recursive=TRUE)
deppkg <- unique(sort(do.call(c, deplst)))
IP <- installed.packages()
needed <- setdiff(deppkg, IP[, "Package"])
db <- getQueueFile(package=package, path=directory)
q <- ensure_queue("depends", db = db)
n <- length(needed)
for (i in 1:n) {
ttl <- paste0(needed[i])
msg <- paste(needed[i])
publish(q, title = ttl, message = msg)
}
list_messages(q)
}
globalVariables(c("Package", "Version")) # pacify R CMD check
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.