testSkeletonGit2r <- function(wd) {
# options(error=traceback)
# make a package to test with
.foofn <- function() "foo"
utils::package.skeleton(name = "foo", list=".foofn", environment = environment(), path=wd)
print(dir(wd, recursive = TRUE))
message("building")
#https://github.com/r-lib/testthat/issues/129
R_TESTS=Sys.getenv("R_TESTS")
Sys.setenv(R_TESTS="")
cwd <- getwd()
setwd(wd)
cmd <- sprintf("%s/bin%s/R CMD build foo --no-manual",
Sys.getenv("R_HOME"), Sys.getenv("R_ARCH_BIN"))
system(cmd)
setwd(cwd)
Sys.setenv(R_TESTS=R_TESTS)
message("dratting")
# make a repo to test with
rdir <- file.path(wd, "drat")
cat("
empty", file=file.path(wd, "index.html"))
dir.create(rdir)
repo <- git2r::init(rdir)
git2r::config(repo, user.name="Alice", user.email="alice@example.org")
cat("foo", file=file.path(rdir, "README"))
cat("empty", file=file.path(rdir, "index.html"))
git2r::add(repo, "README")
git2r::add(repo, "index.html")
comm <- git2r::commit(repo, "init")
location <- getOption("dratBranch", "gh-pages")
if (location == "gh-pages") {
git2r::branch_create(comm,"gh-pages")
} else {
ddir <- file.path(rdir, "docs")
if (!dir.exists(ddir)) dir.create(ddir)
}
# finally add the package
drat::insertPackage(file = file.path(wd, "foo_1.0.tar.gz"), repodir = rdir, commit = "test")
res <- list(status = git2r::status(repo),
dir = unique(dirname(dir(rdir, recursive = TRUE))))
if(!all(lengths(res$status) == 0L)){
stop("Unstaged files")
}
if (location == "gh-pages") {
if (!all(c(".","src/contrib") %in% res$dir)) stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib") %in% res$dir)) stop("Wrong dir structure")
}
rdir
}
testRepoActions <- function(repodir){
if (!dir.exists(file.path(repodir, "docs"))) dir.create(file.path(repodir, "docs"))
cat("empty", file=file.path(repodir, "docs", "index.html"))
src_files <- list.files(system.file("extdata","src", package = "drat"),
pattern = "foo*",
full.names = TRUE)
drat::insertPackage(file = src_files[2], repodir = repodir)
drat::insertPackage(file = src_files[3], repodir = repodir)
repoinfo <- drat:::getRepoInfo(repopath = repodir)
if(nrow(repoinfo) != 3L){
stop("Not all package files found")
}
#
location <- getOption("dratBranch", "gh-pages")
bin_files_4_0 <- list.files(system.file("extdata", "4.0", package = "drat"),
pattern = "foo*",
full.names = TRUE)
drat::insertPackages(file = bin_files_4_0, repodir = repodir)
res <- list(dir = unique(dirname(dir(repodir, recursive = TRUE))))
if (location == "gh-pages") {
if (!all(c(".","src/contrib","bin/macosx/contrib/4.0","bin/windows/contrib/4.0") %in% res$dir))
stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib","docs/bin/macosx/contrib/4.0","docs/bin/windows/contrib/4.0") %in% res$dir))
stop("Wrong dir structure")
}
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = "4.0")
if(nrow(repoinfo) != 9L){
stop("Wrong package files found")
}
if(sum(repoinfo$newest) != 3L){
stop("Package 'newest' status wrong")
}
#
bin_files_3_6 <- list.files(system.file("extdata", "3.6", package = "drat"),
pattern = "foo*",
full.names = TRUE)
drat::insertPackages(file = bin_files_3_6, repodir = repodir)
res <- list(dir = unique(dirname(dir(repodir, recursive = TRUE))))
if (location == "gh-pages") {
if (!all(c(".","src/contrib","bin/macosx/contrib/4.0","bin/windows/contrib/4.0",
"bin/macosx/el-capitan/contrib/3.6") %in% res$dir))
stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib","docs/bin/macosx/contrib/4.0","docs/bin/windows/contrib/4.0",
"docs/bin/macosx/el-capitan/contrib/3.6") %in% res$dir))
stop("Wrong dir structure")
}
#
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = "3.6")
repoinfo2 <- drat::pruneRepo(repopath = repodir, version = "3.6")
if(!all(repoinfo == repoinfo2)){
stop("test run of pruneRepo changed files")
}
repoinfo <- drat::pruneRepo(repopath = repodir, remove = TRUE, version = "4.0")
if(nrow(repoinfo) != 3L){
stop("Wrong package files found after pruning")
}
#
repoinfo <- drat::pruneRepo(repopath = repodir, remove = TRUE)
#
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = NA,
type = c("source","binary"))
if(getRversion() < package_version("4.0")){
if(nrow(repoinfo) != 4L){
stop("Wrong package files found after pruning for version = NA")
}
# R 4.1 and 4.2 produces one extra row in the repoinfo compared to R 4.3:
} else if(getRversion() < package_version("4.3")){
if(nrow(repoinfo) != 7L){
#stop("Wrong package files found after pruning for version = NA")
warning("Wrong package files found after pruning for version = NA")
}
} else {
if(nrow(repoinfo) != 6L){
#stop("Wrong package files found after pruning for version = NA")
warning("Wrong package files found after pruning for version = NA")
}
}
repoinfo2 <- drat::pruneRepoForAllRversions(repopath = repodir, remove = TRUE)
if(nrow(repoinfo2) != 4L){
stop("Wrong package files found after pruning vor all r versions")
}
#
drat::insertPackages(file = src_files, repodir = repodir)
drat::insertPackages(file = bin_files_3_6, repodir = repodir)
drat::insertPackages(file = bin_files_4_0, repodir = repodir)
#
drat::archivePackages(repopath = repodir, type = "source")
res <- list(dir = unique(dirname(dir(repodir, recursive = TRUE))))
if (location == "gh-pages") {
if (!all(c(".","src/contrib","bin/macosx/contrib/4.0","bin/windows/contrib/4.0",
"bin/macosx/el-capitan/contrib/3.6", "src/contrib/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib","docs/bin/macosx/contrib/4.0","docs/bin/windows/contrib/4.0",
"docs/bin/macosx/el-capitan/contrib/3.6", "docs/src/contrib/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
}
drat::insertPackages(file = src_files[3], repodir = repodir, action="archive")
#
drat::archivePackages(repopath = repodir, type = "binary", version = "3.6")
res <- list(dir = unique(dirname(dir(repodir, recursive = TRUE))))
if (location == "gh-pages") {
if (!all(c(".","src/contrib","bin/macosx/contrib/4.0","bin/windows/contrib/4.0",
"bin/macosx/el-capitan/contrib/3.6",
"bin/macosx/el-capitan/contrib/3.6/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib","docs/bin/macosx/contrib/4.0","docs/bin/windows/contrib/4.0",
"docs/bin/macosx/el-capitan/contrib/3.6",
"docs/bin/macosx/el-capitan/contrib/3.6/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
}
#
drat::archivePackages(repopath = repodir, type = "win.binary", version = "4.0")
res <- list(dir = unique(dirname(dir(repodir, recursive = TRUE))))
if (location == "gh-pages") {
if (!all(c(".","src/contrib","bin/macosx/contrib/4.0","bin/windows/contrib/4.0",
"bin/macosx/el-capitan/contrib/3.6",
"bin/macosx/el-capitan/contrib/3.6/Archive/foo",
"bin/windows/contrib/4.0/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib","docs/bin/macosx/contrib/4.0","docs/bin/windows/contrib/4.0",
"docs/bin/macosx/el-capitan/contrib/3.6",
"docs/bin/macosx/el-capitan/contrib/3.6/Archive/foo",
"docs/bin/windows/contrib/4.0/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
}
#
repoinfo <- drat:::getRepoInfo(repopath = repodir, version=NA)
if(nrow(repoinfo) != 6L){
stop("Wrong package files found for getRepoInfo")
}
drat::insertPackages(file = src_files, repodir = repodir)
drat::insertPackages(file = bin_files_3_6, repodir = repodir)
drat::insertPackages(file = bin_files_4_0, repodir = repodir)
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = "4.0")
if(nrow(repoinfo) != 10L){
stop("Wrong package files found for getRepoInfo after fill up")
}
#
drat::archivePackages(repopath = repodir, version = "4.0")
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = "4.0")
if(nrow(repoinfo) != 3L){
stop("Wrong package files found for getRepoInfo after archiving")
}
res <- list(dir = unique(dirname(dir(repodir, recursive = TRUE))))
if (location == "gh-pages") {
if (!all(c(".","src/contrib","bin/macosx/contrib/4.0","bin/windows/contrib/4.0",
"bin/macosx/el-capitan/contrib/3.6",
"bin/macosx/el-capitan/contrib/3.6/Archive/foo",
"bin/windows/contrib/4.0/Archive/foo",
"src/contrib/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
} else {
if (!all(c(".","docs/src/contrib","docs/bin/macosx/contrib/4.0","docs/bin/windows/contrib/4.0",
"docs/bin/macosx/el-capitan/contrib/3.6",
"docs/bin/macosx/el-capitan/contrib/3.6/Archive/foo",
"docs/bin/windows/contrib/4.0/Archive/foo",
"docs/src/contrib/Archive/foo") %in% res$dir))
stop("Wrong dir structure")
}
#
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = NA)
if(nrow(repoinfo) != 6L){
stop("Wrong package files found for getRepoInfo with version = NA")
}
drat::archivePackagesForAllRversions(repopath = repodir)
repoinfo <- drat:::getRepoInfo(repopath = repodir, version = NA)
if(nrow(repoinfo) != 4L){
stop("Wrong package files found for getRepoInfo after archiving for all R versions")
}
# test insertPackage optional arguments
drat::insertPackages(file = src_files, repodir = repodir, latestOnly = TRUE)
pkgsrds <- ifelse(location == "gh-pages", "src/contrib/PACKAGES.rds", "docs/src/contrib/PACKAGES.rds")
PACKAGES <- readRDS(file.path(repodir, pkgsrds))
if(nrow(PACKAGES) != 1L){
stop("Wrong number of packages written to 'PACKAGES': ", nrow(PACKAGES), " != 1L (A)")
}
drat::insertPackages(file = src_files, repodir = repodir)
PACKAGES <- readRDS(file.path(repodir, pkgsrds))
if (nrow(PACKAGES) != 4L){
stop("Wrong number of packages written to 'PACKAGES': ", nrow(PACKAGES), " != 4L (B)")
}
repodir2 <- file.path(repodir, if (location == "gh-pages") "" else "docs")
# test updateRepo optional arguments -- now seems to update only one ?
drat::insertPackages(file = src_files, repodir = repodir, latestOnly = TRUE)
drat::updateRepo(repopath = repodir2)
PACKAGES <- readRDS(file.path(repodir, pkgsrds))
if (nrow(PACKAGES) != 4L){
stop("Wrong number of packages updated to 'PACKAGES': ", nrow(PACKAGES), " != 4L (C)")
}
drat::insertPackages(file = src_files, repodir = repodir, latestOnly = TRUE)
drat::updateRepo(repopath = repodir, latestOnly = TRUE)
PACKAGES <- readRDS(file.path(repodir, pkgsrds))
if (nrow(PACKAGES) != 1L){
stop("Wrong number of packages updated to 'PACKAGES': ", nrow(PACKAGES), " != 3L (D)")
}
drat::insertPackages(file = src_files, repodir = repodir)
drat::updateRepo(repopath = repodir, latestOnly = TRUE)
PACKAGES <- readRDS(file.path(repodir, pkgsrds))
if (nrow(PACKAGES) != 4L){
stop("Wrong number of packages updated to 'PACKAGES': ", nrow(PACKAGES), " != 4L (E)")
}
file.path(repodir2, "src", "contrib", "foo_1.0.tar.gz")
file.remove(file.path(repodir2, "src", "contrib", "foo_1.0.tar.gz"))
drat::updateRepo(repopath = repodir2, latestOnly = TRUE)
PACKAGES <- readRDS(file.path(repodir, pkgsrds))
if(nrow(PACKAGES) != 3L){
stop("Wrong number of packages updated to 'PACKAGES':", nrow(PACKAGES), "!= 3L (F)")
}
}
runTest <- function(wd, location = "gh-pages"){
options("dratBranch" = location)
repodir <- testSkeletonGit2r(wd)
testRepoActions(repodir)
unlink(file.path(wd,"foo"), recursive = TRUE)
unlink(file.path(wd,"drat"), recursive = TRUE)
}
wd <- tempdir()
if (requireNamespace("git2r", quietly=TRUE)) {
runTest(wd, "gh-pages")
}
runTest(wd, "docs")
## TODO Use
## > as.package_version(system("sw_vers -productVersion", intern = TRUE)) == 13.1
## [1] TRUE
## if on Darwin and x86_64 (as in tiledb-r's configure.ac with
## uname=`uname`
## machine=`uname -m`
## if test x"${uname}" = x"Darwin" -a x"${machine}" = x"x86_64"; then
## which we can rework as R system() calls.
##
## Use https://en.wikipedia.org/wiki/MacOS_version_history for mininum versions
## Using macOS 11 ("Big Sur") may work