|
| 1 | +library(drake) |
| 2 | +library(tidyverse) |
| 3 | +library(glue) |
| 4 | + |
| 5 | +options(repos = revdepcheck:::get_repos(TRUE)) |
| 6 | + |
| 7 | +get_this_pkg <- function() { |
| 8 | + desc::desc_get("Package") %>% unname() |
| 9 | +} |
| 10 | + |
| 11 | +get_base_pkgs <- function() { |
| 12 | + rownames(installed.packages(priority = "base")) |
| 13 | +} |
| 14 | + |
| 15 | +flatten <- . %>% unname() %>% unlist() %>% unique() |
| 16 | + |
| 17 | +retry <- function(code, N = 1) { |
| 18 | + quo <- rlang::enquo(code) |
| 19 | + |
| 20 | + for (i in seq_len(N)) { |
| 21 | + ret <- tryCatch(rlang::eval_tidy(quo), error = identity) |
| 22 | + if (!inherits(ret, "error")) return(ret) |
| 23 | + Sys.sleep(runif(1) * 2) |
| 24 | + } |
| 25 | + |
| 26 | + stop(ret) |
| 27 | +} |
| 28 | + |
| 29 | +get_plan_deps <- function() { |
| 30 | + plan_deps <- drake_plan( |
| 31 | + available = available.packages(), |
| 32 | + this_pkg = get_this_pkg(), |
| 33 | + revdeps = tools::package_dependencies(this_pkg, available, 'most', reverse = TRUE) %>% flatten(), |
| 34 | + first_level_deps = tools::package_dependencies(revdeps, available, 'most'), |
| 35 | + all_level_deps = tools::package_dependencies(first_level_deps %>% flatten(), available, recursive = TRUE), |
| 36 | + base_pkgs = get_base_pkgs(), |
| 37 | + deps = c(revdeps, first_level_deps, all_level_deps) %>% flatten() %>% tools::package_dependencies(recursive = TRUE) %>% .[!(names(.) %in% base_pkgs)], |
| 38 | + strings_in_dots = "literals" |
| 39 | + ) |
| 40 | + |
| 41 | + plan_deps |
| 42 | +} |
0 commit comments