only knit rmd files to md if they have changed
authorjsta <stachel2@msu.edu>
Sun, 1 Jul 2018 14:23:24 +0000 (10:23 -0400)
committerFrançois Michonneau <francois.michonneau@gmail.com>
Tue, 21 Aug 2018 16:52:48 +0000 (12:52 -0400)
Makefile
bin/generate_md_episodes.R
bin/knit_lessons.sh

index 5ee09806c43fdbf2cf8e337211a22f69f664b440..ac587b879e52e3fb22134f0b9786c1188f207bd9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -88,9 +88,8 @@ HTML_DST = \
 ## lesson-md        : convert Rmarkdown files to markdown
 lesson-md : ${RMD_DST}
 
-# Use of .NOTPARALLEL makes rule execute only once
-${RMD_DST} : ${RMD_SRC}
-       @bin/knit_lessons.sh ${RMD_SRC}
+_episodes/%.md: _episodes_rmd/%.Rmd
+       @bin/knit_lessons.sh $< $@
 
 ## lesson-check     : validate lesson Markdown.
 lesson-check : lesson-fixme
index 6c27d9c9245fc5b6d1c5aaa82af2ea4073e59b80..60d65e970be608b571e7a47e74e966f6aee7dd2a 100644 (file)
@@ -24,15 +24,18 @@ generate_md_episodes <- function() {
         install.packages(missing_pkgs)
     }
 
-    ## find all the Rmd files, and generate the paths for their respective outputs
-    src_rmd <- list.files(pattern = "??-*.Rmd$", path = "_episodes_rmd", full.names = TRUE)
-    dest_md <- file.path("_episodes", gsub("Rmd$", "md", basename(src_rmd)))
+    ## get the Rmd file to process from the command line, and generate the path for their respective outputs
+    args  <- commandArgs(trailingOnly = TRUE)
+    if (length(args) != 2){
+      stop("input and output file must be passed to the script")
+    }
     
+    src_rmd <- args[1]
+    dest_md <- args[2]
+
     ## knit the Rmd into markdown
-    mapply(function(x, y) {
-        knitr::knit(x, output = y)
-    }, src_rmd, dest_md)
-    
+    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)
index 3a2395f3cf803ffaa90369936fd253ab06994e71..6f9dae04dcc09173e34d6fe72a02b638cb22dba0 100755 (executable)
@@ -4,5 +4,5 @@
 # The Makefile passes in the names of files.
 
 if [ $# -ne 0 ] ; then
-    Rscript -e "source('bin/generate_md_episodes.R')"
+    Rscript -e "source('bin/generate_md_episodes.R')" $*
 fi