Skip to content

Instantly share code, notes, and snippets.

@mtmorgan
Created August 14, 2020 16:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mtmorgan/6a64f8d8c24930761a2aadc39fc9e417 to your computer and use it in GitHub Desktop.
Save mtmorgan/6a64f8d8c24930761a2aadc39fc9e417 to your computer and use it in GitHub Desktop.
package_dependencies <- tools::package_dependencies
trim <- function(deps, drop) {
lvls = names(deps)
df = data.frame(
pkg = factor(rep(names(deps), lengths(deps)), levels = lvls),
dep = unlist(deps, use.names = FALSE)
)
df = df[!df$dep %in% drop,, drop = FALSE]
split(df$dep, df$pkg)
}
db = available.packages(repos = BiocManager::repositories())
soft = available.packages(repos = BiocManager::repositories()["BioCsoft"])
deps0 = package_dependencies(rownames(soft), db, recursive=TRUE)
deps1 = package_dependencies(
union(names(deps0), unlist(deps0, use.names = FALSE)),
db, recursive=TRUE
)
deps = deps1
inst = installed.packages()
## drop these on the first iteration
do = inst[,"Package"][inst[,"Priority"] %in% "base"]
deps = deps[!names(deps) %in% do]
length(deps)
table(lengths(deps))
while (length(deps)) {
deps = trim(deps, do)
do = names(deps)[lengths(deps) == 0L]
## do the work here
message(length(deps), " " , length(do))
deps = deps[!names(deps) %in% do]
}
## updates
## update = rownames(BiocManager::valid()$out_of_date)
## update_deps0 =
## tools::package_dependencies(update, db, reverse = TRUE, recursive = TRUE)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment