Nothing
library("R.utils")
verbose <- Arguments$getVerbose(TRUE, timestamp=TRUE)
# Run only tests if this platform/client supports symbolic file links
canSymlink <- tryCatch({
res <- file.symlink(".", "test-symlink-dir")
if (isDirectory("test-symlink-dir")) removeDirectory("test-symlink-dir")
res
}, error = function(ex) FALSE)
# Test only if symlinks are supported
if (canSymlink) {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Local functions
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fileAccessT <- function(pathname, modes=c(exist=0, exec=1, write=2, read=4)) {
sapply(modes, FUN=function(mode) fileAccess(pathname, mode=mode))
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# DIRECTORIES
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
verbose && enter(verbose, "Symbolic links to directories")
# Create a target
path <- file.path(tempdir(), "foo")
mkdirs(path)
stopifnot(isDirectory(path))
# Create a symbolic link
pathL <- "link-to-tempdir"
file.symlink(path, pathL)
stopifnot(isDirectory(pathL))
# File information (directly and via link)
fi <- file.info(path)
fiL <- file.info2(pathL)
stopifnot(all.equal(fiL, fi, check.attributes=FALSE))
# Add a file (via link)
pathnameL <- file.path(pathL, "target2.txt")
cat("Hello", file=pathnameL)
# Assert that it exists (via direct pathname)
pathname <- file.path(path, "target2.txt")
stopifnot(isFile(pathname))
# Remove file (via direct pathname)
file.remove(pathname)
stopifnot(!isFile(pathname))
stopifnot(!isFile(pathnameL))
verbose && enter(verbose, "Renaming")
pathL2 <- sprintf("%s-new", pathL)
renameFile(pathL, pathL2)
stopifnot(isDirectory(pathL2))
renameFile(pathL2, pathL)
stopifnot(isDirectory(pathL))
verbose && exit(verbose)
# File access
verbose && enter(verbose, "Testing file permissions & access information")
fa <- fileAccessT(path)
faL <- fileAccessT(pathL)
stopifnot(identical(faL, fa))
# Disable write permission on target
Sys.chmod(path, mode="0077")
fa <- fileAccessT(path)
faL <- fileAccessT(pathL)
stopifnot(identical(faL, fa))
# Reset
Sys.chmod(path, mode="0777")
verbose && exit(verbose)
# Removing & cleanup
verbose && enter(verbose, "Cleanup")
# (Neither file.remove() nor unlink() can remove symbolic directory links)
removeDirectory(pathL)
stopifnot(!isDirectory(pathL))
stopifnot(isDirectory(path))
removeDirectory(path)
stopifnot(!isDirectory(path))
verbose && exit(verbose)
verbose && exit(verbose)
} # if (canSymlink)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.