/
remote_package_deps.R
90 lines (84 loc) · 2.39 KB
/
remote_package_deps.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
#' Get Remote Package Dependencies
#'
#' @param path Path to DESCRIPTION file
#' @param dependencies List of dependencies to parse, passed to
#' \code{\link{get_dep_table}}
#' @param exclude_remotes exclude Remotes in dependency table
#' @param ... arguments passed to \code{\link{get_remote_package_dcf}}
#'
#' @return A \code{data.frame} of Dependencies
#' (\code{all_remote_package_deps}) or a list of a
#' package dependency table and a vector of package names for the
#' remotes (\code{remote_package_deps})
#' @export
#'
#' @examples
#' remote_package_deps("stnava/ANTsRCore")
#' path = example_description_file()
#' all_remote_package_deps(path = path)
#' missing_remote_deps(path = path)
#' @export
all_remote_package_deps = function(
path = "DESCRIPTION",
...,
dependencies = c("Depends", "Imports",
"LinkingTo", "Suggests"),
exclude_remotes = TRUE) {
repo = get_remotes(path = path)
L = remote_package_deps(repo = repo,
dependencies = dependencies,
...)
packs = names(L)
deps = do.call("rbind", L)
rownames(deps) = NULL
deps = unique(deps)
if (exclude_remotes) {
deps = deps[ !(deps$name %in% packs), , drop = FALSE]
}
return(deps)
}
#' @rdname all_remote_package_deps
#' @export
remote_package_deps = function(
...,
dependencies = c("Depends", "Imports",
"LinkingTo", "Suggests")) {
tmp_dcf = get_remote_package_dcf(...)
L = vector(mode = "list", length = length(tmp_dcf))
# packs = rep(NA, length = length(tmp_dcf))
for (iL in seq_along(tmp_dcf)) {
tmp = tmp_dcf[[iL]]
if (is.na(tmp)) {
L[[iL]] = NULL
} else {
L[[iL]] = get_dep_table(path = tmp,
dependencies = dependencies)
names(L)[iL] = read_dcf(tmp)$dcf$Package
# packs[iL] = read_dcf(tmp)$dcf$Package
}
}
# names(L) = packs
return(L)
}
#' @rdname all_remote_package_deps
#' @export
missing_remote_deps = function(
path = "DESCRIPTION",
...) {
res = all_remote_package_deps(
path = path,
...)
res = res$name[ !(res$name %in% installed.packages()) ]
return(res)
}
#' @rdname all_remote_package_deps
#' @export
install_missing_remote_deps = function(
path = "DESCRIPTION",
...) {
packs = missing_remote_deps(path = path, ...)
if (length(packs) > 0) {
install.packages(packs)
}
return(all(packs %in% installed.packages()))
}