Skip to content

Commit f94aa34

Browse files
committed
Consistent 'pkg' & 'package(s)' arguments, less exports
1 parent ace8df7 commit f94aa34

File tree

4 files changed

+45
-137
lines changed

4 files changed

+45
-137
lines changed

R/deps.R

+21-110
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,8 @@
1-
#' Find all dependencies of a CRAN or dev package.
2-
#'
3-
#' Find all the dependencies of a package and determine whether they are ahead
4-
#' or behind CRAN. A \code{print()} method identifies mismatches (if any)
5-
#' between local and CRAN versions of each dependent package; an
6-
#' \code{update()} method installs outdated or missing packages from CRAN.
7-
#'
8-
#' @param pkg A character vector of package names. If missing, defaults to
9-
#' the name of the package in the current directory.
10-
#' @param dependencies Which dependencies do you want to check?
11-
#' Can be a character vector (selecting from "Depends", "Imports",
12-
#' "LinkingTo", "Suggests", or "Enhances"), or a logical vector.
13-
#'
14-
#' \code{TRUE} is shorthand for "Depends", "Imports", "LinkingTo" and
15-
#' "Suggests". \code{NA} is shorthand for "Depends", "Imports" and "LinkingTo"
16-
#' and is the default. \code{FALSE} is shorthand for no dependencies (i.e.
17-
#' just check this package, not its dependencies).
18-
#' @param quiet If \code{TRUE}, suppress output.
19-
#' @param upgrade If \code{TRUE}, also upgrade any of out date dependencies.
20-
#' @param repos A character vector giving repositories to use.
21-
#' @param type Type of package to \code{update}. If "both", will switch
22-
#' automatically to "binary" to avoid interactive prompts during package
23-
#' installation.
24-
#'
25-
#' @param object A \code{package_deps} object.
26-
#' @param ... Additional arguments passed to \code{\link{install.packages}}.
27-
#'
28-
#' @return
29-
#'
30-
#' A \code{data.frame} with columns:
31-
#'
32-
#' \tabular{ll}{
33-
#' \code{package} \tab The dependent package's name,\cr
34-
#' \code{installed} \tab The currently installed version,\cr
35-
#' \code{available} \tab The version available on CRAN,\cr
36-
#' \code{diff} \tab An integer denoting whether the locally installed version
37-
#' of the package is newer (1), the same (0) or older (-1) than the version
38-
#' currently available on CRAN.\cr
39-
#' }
40-
#'
41-
#' @export
42-
#' @examples
43-
#' \dontrun{
44-
#' package_deps("devtools")
45-
#' # Use update to update any out-of-date dependencies
46-
#' update(package_deps("devtools"))
47-
#' }
48-
package_deps <- function(pkg, dependencies = NA, repos = getOption("repos"),
1+
2+
package_deps <- function(packages, dependencies = NA,
3+
repos = getOption("repos"),
494
type = getOption("pkgType")) {
5+
506
if (identical(type, "both")) {
517
type <- "binary"
528
}
@@ -57,7 +13,7 @@ package_deps <- function(pkg, dependencies = NA, repos = getOption("repos"),
5713
repos[repos == "@CRAN@"] <- "http://cran.rstudio.com"
5814
cran <- available_packages(repos, type)
5915

60-
deps <- sort(find_deps(pkg, cran, top_dep = dependencies))
16+
deps <- sort(find_deps(packages, cran, top_dep = dependencies))
6117

6218
# Remove base packages
6319
inst <- installed.packages()
@@ -82,12 +38,12 @@ package_deps <- function(pkg, dependencies = NA, repos = getOption("repos"),
8238
)
8339
}
8440

85-
#' @export
86-
#' @rdname package_deps
87-
dev_package_deps <- function(pkg = ".", dependencies = NA,
41+
dev_package_deps <- function(pkgdir, dependencies = NA,
8842
repos = getOption("repos"),
8943
type = getOption("pkgType")) {
90-
install_dev_remotes(pkg)
44+
45+
pkg <- load_pkg_description(pkgdir)
46+
install_dev_remotes(pkgdir)
9147

9248
dependencies <- tolower(standardise_dep(dependencies))
9349
dependencies <- intersect(dependencies, names(pkg))
@@ -181,36 +137,6 @@ has_dev_remotes <- function(pkg) {
181137
}
182138

183139

184-
#' @export
185-
print.package_deps <- function(x, show_ok = FALSE, ...) {
186-
class(x) <- "data.frame"
187-
188-
ahead <- x$diff > 0L
189-
behind <- x$diff < 0L
190-
same_ver <- x$diff == 0L
191-
192-
x$diff <- NULL
193-
x[] <- lapply(x, format)
194-
195-
if (any(behind)) {
196-
cat("Needs update -----------------------------\n")
197-
print(x[behind, , drop = FALSE], row.names = FALSE, right = FALSE)
198-
}
199-
200-
if (any(ahead)) {
201-
cat("Not on CRAN ----------------------------\n")
202-
print(x[ahead, , drop = FALSE], row.names = FALSE, right = FALSE)
203-
}
204-
205-
if (show_ok && any(same_ver)) {
206-
cat("OK ---------------------------------------\n")
207-
print(x[same_ver, , drop = FALSE], row.names = FALSE, right = FALSE)
208-
}
209-
}
210-
211-
#' @export
212-
#' @rdname package_deps
213-
#' @importFrom stats update
214140
update.package_deps <- function(object, ..., quiet = FALSE, upgrade = TRUE) {
215141
ahead <- object$package[object$diff == 2L]
216142
if (length(ahead) > 0 && !quiet) {
@@ -236,29 +162,29 @@ update.package_deps <- function(object, ..., quiet = FALSE, upgrade = TRUE) {
236162

237163
}
238164

239-
install_packages <- function(pkgs, repos = getOption("repos"),
165+
install_packages <- function(packages, repos = getOption("repos"),
240166
type = getOption("pkgType"), ...,
241167
dependencies = FALSE, quiet = NULL) {
242168
if (identical(type, "both"))
243169
type <- "binary"
244170
if (is.null(quiet))
245171
quiet <- !identical(type, "source")
246172

247-
message("Installing ", length(pkgs), " packages: ",
248-
paste(pkgs, collapse = ", "))
249-
utils::install.packages(pkgs, repos = repos, type = type, ...,
173+
message("Installing ", length(packages), " packages: ",
174+
paste(packages, collapse = ", "))
175+
utils::install.packages(packages, repos = repos, type = type, ...,
250176
dependencies = dependencies, quiet = quiet)
251177
}
252178

253-
find_deps <- function(pkgs, available = available.packages(), top_dep = TRUE,
254-
rec_dep = NA, include_pkgs = TRUE) {
255-
if (length(pkgs) == 0 || identical(top_dep, FALSE))
179+
find_deps <- function(packages, available = available.packages(),
180+
top_dep = TRUE, rec_dep = NA, include_pkgs = TRUE) {
181+
if (length(packages) == 0 || identical(top_dep, FALSE))
256182
return(character())
257183

258184
top_dep <- standardise_dep(top_dep)
259185
rec_dep <- standardise_dep(rec_dep)
260186

261-
top <- tools::package_dependencies(pkgs, db = available, which = top_dep)
187+
top <- tools::package_dependencies(packages, db = available, which = top_dep)
262188
top_flat <- unlist(top, use.names = FALSE)
263189

264190
if (length(rec_dep) != 0 && length(top_flat) > 0) {
@@ -269,7 +195,7 @@ find_deps <- function(pkgs, available = available.packages(), top_dep = TRUE,
269195
rec_flat <- character()
270196
}
271197

272-
unique(c(if (include_pkgs) pkgs, top_flat, rec_flat))
198+
unique(c(if (include_pkgs) packages, top_flat, rec_flat))
273199
}
274200

275201

@@ -287,24 +213,9 @@ standardise_dep <- function(x) {
287213
}
288214
}
289215

290-
#' Update packages that are missing or out-of-date.
291-
#'
292-
#' Works similarly to \code{install.packages()} but doesn't install packages
293-
#' that are already installed, and also upgrades out dated dependencies.
294-
#'
295-
#' @param pkgs Character vector of packages to update.
296-
#' @inheritParams package_deps
297-
#' @seealso \code{\link{package_deps}} to see which packages are out of date/
298-
#' missing.
299-
#' @export
300-
#' @examples
301-
#' \dontrun{
302-
#' update_packages("ggplot2")
303-
#' update_packages(c("plyr", "ggplot2"))
304-
#' }
305-
update_packages <- function(pkgs, dependencies = NA,
216+
update_packages <- function(packages, dependencies = NA,
306217
repos = getOption("repos"),
307218
type = getOption("pkgType")) {
308-
pkgs <- package_deps(pkgs, repos = repos, type = type)
309-
update(pkgs)
219+
packages <- package_deps(packages, repos = repos, type = type)
220+
update(packages)
310221
}

R/install.R

+12-15
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11

2-
install <- function(pkg, dependencies = NA, quiet = TRUE, ...) {
2+
install <- function(pkgdir, dependencies = NA, quiet = TRUE, ...) {
33

4-
install_deps(pkg, dependencies = dependencies, quiet = quiet, ...)
4+
install_deps(pkgdir, dependencies = dependencies, quiet = quiet, ...)
55

66
install.packages(
7-
pkg,
7+
pkgdir,
88
repos = NULL,
99
quiet = quiet,
1010
type = "source",
@@ -14,23 +14,20 @@ install <- function(pkg, dependencies = NA, quiet = TRUE, ...) {
1414
invisible(TRUE)
1515
}
1616

17-
#' Install package dependencies if needed.
18-
#'
19-
#' @inheritParams install
20-
#' @inheritParams package_deps
21-
#' @param ... additional arguments passed to \code{\link{install.packages}}.
22-
#' @export
23-
#' @examples
24-
#' \dontrun{install_deps(".")}
25-
install_deps <- function(pkg = ".", dependencies = NA,
17+
install_deps <- function(pkgdir, dependencies = NA,
2618
threads = getOption("Ncpus", 1),
2719
repos = getOption("repos"),
2820
type = getOption("pkgType"),
2921
...,
3022
upgrade = TRUE,
3123
quiet = FALSE) {
3224

33-
pkg <- dev_package_deps(pkg, repos = repos, dependencies = dependencies,
34-
type = type)
35-
update(pkg, ..., Ncpus = threads, quiet = quiet, upgrade = upgrade)
25+
packages <- dev_package_deps(
26+
pkgdir,
27+
repos = repos,
28+
dependencies = dependencies,
29+
type = type
30+
)
31+
32+
update(packages, ..., Ncpus = threads, quiet = quiet, upgrade = upgrade)
3633
}

R/package-deps.R

+1-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,4 @@
1-
#' Parse package dependency strings.
2-
#'
3-
#' @param string to parse. Should look like \code{"R (>= 3.0), ggplot2"} etc.
4-
#' @return list of two character vectors: \code{name} package names,
5-
#' and \code{version} package versions. If version is not specified,
6-
#' it will be stored as NA.
7-
#' @keywords internal
8-
#' @export
9-
#' @examples
10-
#' parse_deps("httr (< 2.1),\nRCurl (>= 3)")
11-
#' # only package dependencies are returned
12-
#' parse_deps("utils (== 2.12.1),\ntools,\nR (>= 2.10),\nmemoise")
1+
132
parse_deps <- function(string) {
143
if (is.null(string)) return()
154
stopifnot(is.character(string), length(string) == 1)

R/package.R

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
load_pkg_description <- function(path) {
3+
path <- normalizePath(path)
4+
path_desc <- file.path(path, "DESCRIPTION")
5+
6+
desc <- read_dcf(path_desc)
7+
names(desc) <- tolower(names(desc))
8+
desc$path <- path
9+
10+
desc
11+
}

0 commit comments

Comments
 (0)