-
Notifications
You must be signed in to change notification settings - Fork 0
/
bootstrap_r_pkgs_WIP.R
112 lines (93 loc) · 3.56 KB
/
bootstrap_r_pkgs_WIP.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# ------------------------------------------------------------------------
#
# Title : Bootstrap/Install R-Libraries
# By : Jimmy Briggs
# Date : 2021-01-03
#
# ------------------------------------------------------------------------
pak::pak_setup()
pak::pak_setup("copy")
pak::pak_update()
pak::pak_sitrep()
# libraries ---------------------------------------------------------------
library(fs)
library(magrittr)
library(purrr)
library(pak)
# functions ---------------------------------------------------------------
#' @keywords internal
#' @noRd
get_package_details <- function(pkg_name) {
pkg_d <- packageDescription(pkg_name)
is.cran <- !is.null(pkg_d$Repository) && pkg_d$Repository ==
"CRAN"
is.github <- !is.null(pkg_d$GithubRepo)
is.base <- !is.null(pkg_d$Priority) && pkg_d$Priority ==
"base"
if (!is.cran & !is.github & !is.base)
stop("CRAN or GitHub info for ", pkg_name, " not found. Other packages repos are not supported.",
call. = FALSE)
if (is.cran)
return(pkg_d[c("Package", "Repository", "Version")])
if (is.github)
return(pkg_d[c("Package", "GithubUsername",
"GithubRepo", "GithubRef", "GithubSHA1")])
}
#' @keywords internal
#' @noRd
get_package_details <- function(pkg_name) {
pkg_d <- packageDescription(pkg_name)
is.cran <- !is.null(pkg_d$Repository) && pkg_d$Repository ==
"CRAN"
is.github <- !is.null(pkg_d$GithubRepo)
is.base <- !is.null(pkg_d$Priority) && pkg_d$Priority ==
"base"
if (!is.cran & !is.github & !is.base)
stop("CRAN or GitHub info for ", pkg_name, " not found. Other packages repos are not supported.",
call. = FALSE)
if (is.cran)
return(pkg_d[c("Package", "Repository", "Version")])
if (is.github)
return(pkg_d[c("Package", "GithubUsername",
"GithubRepo", "GithubRef", "GithubSHA1")])
}
get_packages <- function(path = .libPaths()[1],
ignores = c("_cache"),
known_gh_pkgs = NULL,
known_bio_pkgs = NULL,
personal_pkgs = NULL) {
lib <- path
user_pkgs <- fs::dir_ls(lib, type = "directory") %>%
basename() %>%
setdiff(ignores)
pkgmeta <- purrr::possibly(get_package_details, otherwise = NULL, quiet = TRUE)
user_pkgs_meta <- purrr::map(user_pkgs, pkgmeta) %>%
purrr::set_names(user_pkgs) %>%
purrr::compact()
df <- dplyr::bind_rows(user_pkgs_meta) %>%
dplyr::mutate(
Repository = ifelse(is.na(Repository), "Github", Repository),
install_cmd = ifelse(
Repository == "CRAN",
paste0("remotes::install_version(", shQuote(Package), ", version = ", shQuote(Version), ")"),
paste0("remotes::install_github(", shQuote(paste0(GithubUsername, "/", Package)), ", ref = ", shQuote(GithubSHA1), ")")
),
pkg_ref = ifelse(
Repository == "CRAN", shQuote(Package), shQuote(paste0(GithubUsername, "/", Package))
),
pak_install_cmd = paste0("pak::pak(", pkg_ref, ")")
)
installs <- df$pak_install_cmd
pkgs <- df$pkg_ref
purrr::walk2(installs, pkgs, function(x, y) {
cli::cli_alert_info(text = paste0(paste0("Installing ", y, "...")))
eval(parse(text = x))
})
# specify libdirs ---------------------------------------------------------
libs <- .libPaths()
user_lib <- libs[1]
user_pkgs <- fs::dir_ls(user_lib, type = "directory") %>% basename() %>% setdiff("_cache")
pkgmeta <- purrr::possibly(packageDescription, otherwise = NULL, quiet = TRUE)
user_pkgs_meta <- purrr::map(user_pkgs, pkgmeta) %>%
purrr::set_names(user_pkgs) %>%
purrr::compact()