X-Git-Url: https://git.arvados.org/rnaseq-cwl-training.git/blobdiff_plain/db363c80dd925450f09f2e1c69382a99057b7568..HEAD:/bin/generate_md_episodes.R diff --git a/bin/generate_md_episodes.R b/bin/generate_md_episodes.R index 5975d95..7fb4c5a 100644 --- a/bin/generate_md_episodes.R +++ b/bin/generate_md_episodes.R @@ -1,36 +1,44 @@ generate_md_episodes <- function() { - if (require("knitr") && packageVersion("knitr") < '1.9.19') - stop("knitr must be version 1.9.20 or higher") - - if (!require("stringr")) - stop("The package stringr is required for generating the lessons.") - - if (require("checkpoint")) { - required_pkgs <- - checkpoint:::scanForPackages(project = "_episodes_rmd", - verbose=FALSE, use.knitr = TRUE)$pkgs - } else { - stop("The checkpoint package is required to build the lessons.") - } - - missing_pkgs <- required_pkgs[!(required_pkgs %in% rownames(installed.packages()))] - - if (length(missing_pkgs)) { - message("Installing missing required packages: ", - paste(missing_pkgs, collapse=", ")) - 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))) - - ## knit the Rmd into markdown - mapply(function(x, y) { - knitr::knit(x, output = y) - }, src_rmd, dest_md) - + # avoid ansi color characters from being printed in the output + op <- options() + on.exit(options(op), add = TRUE) + options(crayon.enabled = FALSE) + ## 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") + } + + src_rmd <- args[1] + dest_md <- args[2] + + ## 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 + 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()