You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.9 KiB
66 lines
1.9 KiB
#' Count lines of code (etc) from source packages on CRAN
|
|
#'
|
|
#' @md
|
|
#' @param pkgs names of packages
|
|
#' @param repos character vector, the base URL(s) of the repositories to use,
|
|
#' i.e., the URL of the CRAN master such as "`https://cran.r-project.org`"
|
|
#' or its Statlib mirror, "`http://lib.stat.cmu.edu/R/CRAN`".
|
|
#' @param contrib_url URL(s) of the contrib sections of the repositories. Use
|
|
#' this argument only if your repository mirror is incomplete, e.g.,
|
|
#' because you burned only the ‘contrib’ section on a CD. Overrides
|
|
#' argument repos.
|
|
#' @param .progress show a progress bar? Default: `TRUE` if running interactively.
|
|
#' @return data frame (tibble)
|
|
#' @export
|
|
#' @examples
|
|
#' # requires a network connection therefore is set for you to run it manually
|
|
#' \dontrun{
|
|
#' cloc_cran(c("archdata", "hrbrthemes", "iptools", "dplyr"))
|
|
#' }
|
|
cloc_cran <- function(pkgs,
|
|
repos = getOption("repos"),
|
|
contrib_url = utils::contrib.url(repos, "source"),
|
|
.progress = interactive()) {
|
|
|
|
destdir <- tempfile()
|
|
dir.create(destdir)
|
|
on.exit(unlink(destdir, recursive = TRUE), add = TRUE)
|
|
|
|
# retrieve the package archive
|
|
as.data.frame(
|
|
utils::download.packages(
|
|
pkgs, destdir, repos = repos, contriburl = contrib_url, type = "source", quiet = TRUE
|
|
),
|
|
stringsAsFactors = FALSE
|
|
) -> res_p
|
|
|
|
# call "cloc" on each package archive, bind results into a single data frame
|
|
if (.progress) {
|
|
pb <- utils::txtProgressBar(min = 0, max = length(res_p$V2), style = 3)
|
|
on.exit(close(pb), add = TRUE)
|
|
}
|
|
|
|
i <- 1
|
|
do.call(rbind.data.frame,
|
|
|
|
lapply(res_p$V2, function(x) {
|
|
|
|
if (.progress) {
|
|
utils::setTxtProgressBar(pb, i)
|
|
i <<- i + 1
|
|
}
|
|
|
|
ret <- cloc(x)
|
|
if (nrow(ret) > 0) ret$pkg <- res_p[res_p$V2 == x, ]$V1
|
|
|
|
ret
|
|
|
|
})
|
|
|
|
) -> res
|
|
|
|
class(res) <- c("tbl_df", "tbl", "data.frame")
|
|
|
|
res
|
|
|
|
}
|
|
|