usethis
usethis copied to clipboard
Include code for parsing revdep failures
library(stringr)
library(purrr)
lines <- brio::read_lines("~/Desktop/summary.txt")
# Drop lines before first "Package"
info <- lines[-(1:which(str_starts(lines, "Package: "))[[1]] - 1)]
field_id <- cumsum(str_starts(info, "^\\w[\\w ]+: "))
parse_field <- function(x) {
first <- str_split(x[[1]], ": ", n = 2)[[1]]
structure(
list(
name = first[[1]],
value = first[[2]],
extra = x[-1]
),
class = "field"
)
}
fields <- lapply(unname(split(info, field_id)), parse_field)
head(fields)
package_name <-
package_id <- cumsum(map_lgl(fields, ~ .x$name == "Package"))
packages <- unname(split(fields, package_id))
parse_package <- function(x) {
even <- x[seq(2, length(x) - 1)]
odd <- x[seq(3, length(x))]
results <- map2(even, odd, function(check, result) {
structure(
list(
status = result$value,
check = check$value,
results = result$extra
),
class = "result"
)
})
structure(
list(
name = x[[1]]$value,
results = results
),
class = "package"
)
}
print.packages <- function(x, ..., n = 5) {
lapply(x, print, n = n)
invisible(x)
}
print.package <- function(x, ..., n = 20) {
cat(cli::rule(x$name, col = cli::style_bold), "\n", sep = "")
lapply(x$results, print, n = n)
cat("\n")
invisible(x)
}
print.result <- function(x, ..., n = 10) {
cat(cli::col_red(x$status), ": ", x$check, "\n", sep = "")
if (length(x$results) > n) {
results <- c(x$results[1:(n-1)], " ...")
} else {
results <- x$results
}
cat(results, sep = "\n")
invisible(x)
}
parsed <- lapply(packages, parse_package)
names(parsed) <- map_chr(parsed, "name")
parsed <- structure(parsed, class = "packages")