is_valid_package <- function(file) {
if (!file.exists(file)) {
FALSE
} else if (grepl("\\.zip$", file)) {
is_valid_package_zip(file)
} else if (grepl("\\.tgz$|\\.tar\\.gz$", file)) {
is_valid_package_targz(file)
} else {
## Just ignore other files
FALSE
}
}
is_valid_package_zip <- function(file) {
if (file.info(file)$size == 0) return(FALSE)
tryCatch(
is_package_file_list(file, suppressWarnings(zip_list(file))),
error = function(e) FALSE
)
}
#' @importFrom utils untar
is_valid_package_targz <- function(file) {
if (file.info(file)$size == 0) return(FALSE)
con <- gzfile(file, open = "rb")
on.exit(close(con), add = TRUE)
tryCatch(
is_package_file_list(file, untar(con, list = TRUE)),
error = function(e) FALSE
)
}
is_package_file_list <- function(file, list) {
pkgname <- pkg_name_from_file(file)
## A single directory, named after the package
if (any(! grepl(paste0("^", pkgname, "\\b"), list))) return(FALSE)
## DESCRIPTION file
if (! paste0(pkgname, "/DESCRIPTION") %in% list) return(FALSE)
return(TRUE)
}
pkg_name_from_file <- function(x) {
sub("^([a-zA-Z0-9\\.]+)_.*$", "\\1", basename(x))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.