Use renv (#462)
authorZhian N. Kamvar <zkamvar@gmail.com>
Fri, 29 May 2020 13:01:17 +0000 (06:01 -0700)
committerGitHub <noreply@github.com>
Fri, 29 May 2020 13:01:17 +0000 (09:01 -0400)
bin/generate_md_episodes.R

index 7f37a7b1cfd519be08f6f828745e52598102fe2e..7c137d765ca2062288ef331e9b80d4b879150812 100644 (file)
@@ -1,20 +1,21 @@
 generate_md_episodes <- function() {
 
-  library("methods")
-  
-  if (!require("remotes", quietly = TRUE)) {
-    install.packages("remotes", repos = c(CRAN = "https://cloud.r-project.org/"))
+  if (!requireNamespace("renv", quietly = TRUE)) {
+    install.packages("renv", repos = c(CRAN = "https://cloud.r-project.org/"))
   }
 
-  if (!require("requirements", quietly = TRUE)) {
-    remotes::install_github("hadley/requirements")
+  if (!requireNamespace("rprojroot", quietly = TRUE)) {
+    install.packages("rprojroot", repos = c(CRAN = "https://cloud.r-project.org/"))
   }
 
+  cfg  <- rprojroot::has_file_pattern("^_config.y*ml$")
+  root <- rprojroot::find_root(cfg)
+
   required_pkgs <- unique(c(
     ## Packages for episodes
-    requirements:::req_dir("_episodes_rmd"),
+    renv::dependencies(file.path(root, "_episodes_rmd"), progress = FALSE, error = "ignore")$Package,
     ## Pacakges for tools
-    requirements:::req_dir("bin")
+    renv::dependencies(file.path(root, "bin"), progress = FALSE, error = "ignore")$Package
   ))
 
   missing_pkgs <- setdiff(required_pkgs, rownames(installed.packages()))
@@ -28,7 +29,8 @@ generate_md_episodes <- function() {
   if (require("knitr") && packageVersion("knitr") < '1.9.19')
     stop("knitr must be version 1.9.20 or higher")
 
-  ## get the Rmd file to process from the command line, and generate the path for their respective outputs
+  ## get the Rmd file to process from the command line, and generate the path
+  ## for their respective outputs
   args  <- commandArgs(trailingOnly = TRUE)
   if (!identical(length(args), 2L)) {
     stop("input and output file must be passed to the script")
@@ -40,20 +42,28 @@ generate_md_episodes <- function() {
   ## knit the Rmd into markdown
   knitr::knit(src_rmd, output = dest_md)
 
-    # Read the generated md files and add comments advising not to edit them
-    vapply(dest_md, function(y) {
-      con <- file(y)
-      mdfile <- readLines(con)
-      if (mdfile[1] != "---")
-        stop("Input file does not have a valid header")
-      mdfile <- append(mdfile, "# Please do not edit this file directly; it is auto generated.", after = 1)
-      mdfile <- append(mdfile, paste("# Instead, please edit",
-                                     basename(y), "in _episodes_rmd/"), after = 2)
-      writeLines(mdfile, con)
-      close(con)
-      return(paste("Warning added to YAML header of", y))
-    },
-    character(1))
+  # Read the generated md files and add comments advising not to edit them
+  add_no_edit_comment <- function(y) {
+    con <- file(y)
+    mdfile <- readLines(con)
+    if (mdfile[1] != "---")
+      stop("Input file does not have a valid header")
+    mdfile <- append(
+      mdfile,
+      "# Please do not edit this file directly; it is auto generated.",
+      after = 1
+    )
+    mdfile <- append(
+      mdfile,
+      paste("# Instead, please edit", basename(y), "in _episodes_rmd/"),
+      after = 2
+    )
+    writeLines(mdfile, con)
+    close(con)
+    return(paste("Warning added to YAML header of", y))
+  }
+
+  vapply(dest_md, add_no_edit_comment, character(1))
 }
 
 generate_md_episodes()