@@ -52,6 +52,70 @@ quarto_version <- function() {
5252 as.numeric_version(system2(quarto_bin , " --version" , stdout = TRUE ))
5353}
5454
55+
56+ # ' Check if quarto is available and version meet some requirements
57+ # '
58+ # ' This function allows to test if Quarto is available and meets version requirement, a min, max or
59+ # ' in between requirement.
60+ # '
61+ # ' If `min` and `max` are provided, this will check if Quarto version is
62+ # ' in-between two versions. If non is provided (keeping the default `NULL` for
63+ # ' both), it will just check for Quarto availability version and return `FALSE` if not found.
64+ # '
65+ # ' @param min Minimum version expected.
66+ # ' @param max Maximum version expected
67+ # ' @param error If `TRUE`, will throw an error if Quarto is not available or does not meet the requirement. Default is `FALSE`.
68+ # '
69+ # ' @return logical. `TRUE` if requirement is met, `FALSE` otherwise.
70+ # '
71+ # ' @examples
72+ # ' # Is there an active version available ?
73+ # ' quarto_available()
74+ # ' # check for a minimum requirement
75+ # ' quarto_available(min = "1.5")
76+ # ' # check for a maximum version
77+ # ' quarto_available(max = "1.6")
78+ # ' # only returns TRUE if Pandoc version is between two bounds
79+ # ' quarto_available(min = "1.4", max = "1.6")
80+ # '
81+ # ' @export
82+ quarto_available <- function (min = NULL , max = NULL , error = FALSE ) {
83+ found <- FALSE
84+ is_above <- is_below <- TRUE
85+ if (! is.null(min ) && ! is.null(max )) {
86+ if (min > max ) {
87+ cli :: cli_abort(c(
88+ " Minimum version {.strong {min}} cannot be greater than maximum version {.strong {max}}."
89+ ))
90+ }
91+ }
92+ quarto_version <- tryCatch(
93+ quarto_version(),
94+ error = function (e ) NULL
95+ )
96+ if (! is.null(quarto_version )) {
97+ if (! is.null(min )) is_above <- quarto_version > = min
98+ if (! is.null(max )) is_below <- quarto_version < = max
99+ found <- is_above && is_below
100+ }
101+ if (! found && error ) {
102+ cli :: cli_abort(c(
103+ if (is.null(min ) && is.null(max )) {
104+ " Quarto is not available."
105+ } else {
106+ " Quarto version requirement not met."
107+ },
108+ " *" = if (! is_above ) {
109+ paste0(" Minimum version expected is " , min , " ." )
110+ },
111+ " *" = if (! is_below ) {
112+ paste0(" Maximum version expected is " , max , " ." )
113+ }
114+ ))
115+ }
116+ return (found )
117+ }
118+
55119# ' @importFrom processx run
56120quarto_run <- function (
57121 args = character (),
0 commit comments