diff --git a/r-package/DESCRIPTION b/r-package/DESCRIPTION index 75b10b96..f1f1807d 100644 --- a/r-package/DESCRIPTION +++ b/r-package/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: r5r Title: Rapid Realistic Routing with 'R5' -Version: 1.1.0999 +Version: 1.1.0.9000 Authors@R: c( person("Marcus", "Saraiva", , "marcus.saraiva@gmail.com", role = "aut", comment = c(ORCID = "0000-0001-6218-2338")), @@ -34,7 +34,7 @@ Description: Rapid realistic routing on multimodal transport networks ) corresponds with the R5 version that r5r depends on. License: MIT + file LICENSE -URL: https://github.com/ipeaGIT/r5r, https://ipeagit.github.io/r5r/ +URL: https://github.com/ipeaGIT/r5r BugReports: https://github.com/ipeaGIT/r5r/issues Depends: R (>= 3.6) diff --git a/r-package/NAMESPACE b/r-package/NAMESPACE index 71e83e7c..d27d5bc2 100644 --- a/r-package/NAMESPACE +++ b/r-package/NAMESPACE @@ -7,6 +7,7 @@ export(expanded_travel_time_matrix) export(find_snap) export(isochrone) export(pareto_frontier) +export(r5r_cache) export(r5r_sitrep) export(read_fare_structure) export(setup_fare_structure) diff --git a/r-package/NEWS.md b/r-package/NEWS.md index 853a5f47..eff97af2 100644 --- a/r-package/NEWS.md +++ b/r-package/NEWS.md @@ -8,7 +8,7 @@ **Major changes** -- r5r now stores R5 Jar file at `tools::R_user_dir("r5r", which = "cache")` +- r5r now stores R5 Jar file at user dir using `tools::R_user_dir()` - By using the JDK 21, this version of r5r also fixed an incompatibility with MAC ARM processors. Closed [#315](https://github.com/ipeaGIT/r5r/issues/315) **Minor changes** diff --git a/r-package/R/download_r5.R b/r-package/R/download_r5.R index 7736bd23..f31f9ac2 100644 --- a/r-package/R/download_r5.R +++ b/r-package/R/download_r5.R @@ -40,7 +40,9 @@ download_r5 <- function(version = "7.0.0", options(timeout = max(600, getOption("timeout"))) - # download R5's jar ----------------------------------------------------- + # download R5 jar ----------------------------------------------------- + + if (!dir.exists(r5r_env$cache_dir)) dir.create(r5r_env$cache_dir, recursive = TRUE) file_url <- fileurl_from_metadata(version) filename <- basename(file_url) @@ -48,7 +50,7 @@ download_r5 <- function(version = "7.0.0", jar_file <- data.table::fifelse( temp_dir, file.path(tempdir(), filename), - file.path(tools::R_user_dir("r5r", which = "cache"), filename) + file.path( r5r_env$cache_dir , filename) ) diff --git a/r-package/R/onLoad.R b/r-package/R/onLoad.R new file mode 100644 index 00000000..a7848f77 --- /dev/null +++ b/r-package/R/onLoad.R @@ -0,0 +1,32 @@ +# initial message about ram memory +.onAttach <- function(lib, pkg) { + packageStartupMessage( + "Please make sure you have already allocated ", + "some memory to Java by running:\n", + " options(java.parameters = '-Xmx2G').\n", + "You should replace '2G' by the amount of memory you'll require. ", + "Currently, Java memory is set to ", getOption("java.parameters") + ) + } + +# package global variables +r5r_env <- new.env(parent = emptyenv()) # nocov start + +.onLoad <- function(lib, pkg) { + + # JAR version + r5r_env$r5_jar_version <- "7.0.0" + + # create dir to store R5 Jar + cache_d <- paste0('r5r/r5_jar_v', r5r_env$r5_jar_version) + r5r_env$cache_dir <- tools::R_user_dir(cache_d, which = 'cache') + if (!dir.exists(r5r_env$cache_dir)) dir.create(r5r_env$cache_dir, recursive = TRUE) + # gsub("\\\\", "/", r5r_env$cache_dir) + + ## delete any JAR files from old releases + dir_above <- dirname(r5r_env$cache_dir) + all_cache <- list.files(dir_above, pattern = 'r5',full.names = TRUE) + old_cache <- all_cache[!grepl(r5r_env$r5_jar_version, all_cache)] + if(length(old_cache)>0){ unlink(old_cache, recursive = TRUE) } + +} diff --git a/r-package/R/r5r.R b/r-package/R/r5r.R index 125b1847..f1df6109 100644 --- a/r-package/R/r5r.R +++ b/r-package/R/r5r.R @@ -83,18 +83,3 @@ if (getRversion() >= "2.15.1") { ) ) } - -.onAttach <- function(lib, pkg) { - packageStartupMessage( - "Please make sure you have already allocated ", - "some memory to Java by running:\n", - " options(java.parameters = '-Xmx2G').\n", - "You should replace '2G' by the amount of memory you'll require. ", - "Currently, Java memory is set to ", getOption("java.parameters") - ) - - # create dir to store R5 Jar - jar_dir <- tools::R_user_dir("r5r", which = "cache") - if (!dir.exists(jar_dir)) dir.create(jar_dir, recursive = TRUE) - -} diff --git a/r-package/R/r5r_cache.R b/r-package/R/r5r_cache.R new file mode 100644 index 00000000..8ef5a675 --- /dev/null +++ b/r-package/R/r5r_cache.R @@ -0,0 +1,70 @@ +#' Manage cached files from the r5r package +#' +#' @param list_files Logical. Whether to print a message with the address of r5r +#' JAR files cached locally. Defaults to `TRUE`. +#' @param delete_file String. The file name (basename) of a JAR file cached +#' locally that should be deleted. Defaults to `NULL`, so that no +#' file is deleted. If `delete_file = "all"`, then all cached files are +#' deleted. +#' +#' @return A message indicating which file exist and/or which ones have been +#' deleted from local cache directory. +#' @export +#' @family Cache data +#' @examplesIf identical(tolower(Sys.getenv("NOT_CRAN")), "true") +#' # list all files cached +#' r5r_cache(list_files = TRUE) +#' +#' # delete particular file +#' r5r_cache(delete_file = '2010_deaths') +#' +r5r_cache <- function(list_files = TRUE, + delete_file = NULL){ + + # check inputs + checkmate::assert_logical(list_files) + checkmate::assert_character(delete_file, null.ok = TRUE) + + # find / create local dir + if (!dir.exists(r5r_env$cache_dir)) { dir.create(r5r_env$cache_dir, recursive=TRUE) } + + # list cached files + files <- list.files(dirname(r5r_env$cache_dir), full.names = TRUE) + + # if wants to delete file + # delete_file = "2_families.parquet" + if (!is.null(delete_file)) { + + # IF file does not exist, print message + if (!any(grepl(delete_file, files)) & delete_file != "all") { + message(paste0("The file '", delete_file, "' is not cached.")) + } + + # IF file exists, delete file + if (any(grepl(delete_file, files))) { + f <- files[grepl(delete_file, files)] + unlink(f, recursive = TRUE) + message(paste0("The file '", delete_file, "' has been removed.")) + } + + # Delete ALL file + if (delete_file=='all') { + + # delete any files from censobr, current and old data releases + dir_above <- dirname(r5r_env$cache_dir) + unlink(dir_above, recursive = TRUE) + message(paste0("All files have been removed.")) + + } + } + + # list cached files + files <- list.files(r5r_env$cache_dir, full.names = TRUE) + + # print file names + if(isTRUE(list_files)){ + message('Files currently chached:') + message(paste0(files, collapse = '\n')) + } +} + diff --git a/r-package/R/r5r_sitrep.R b/r-package/R/r5r_sitrep.R index e6a7aa74..39c0556b 100644 --- a/r-package/R/r5r_sitrep.R +++ b/r-package/R/r5r_sitrep.R @@ -19,13 +19,13 @@ r5r_sitrep <- function() { r5r_package_version <- utils::packageVersion("r5r") - jar_dir <- tools::R_user_dir("r5r", which = "cache") + jar_dir <- r5r_env$cache_dir jar_dir_files <- list.files(jar_dir) jar_dir_files_full_names <- list.files(jar_dir, full.names = TRUE) r5r_jar <- jar_dir_files[grepl("r5r_\\d_\\d_\\d.*\\.jar", jar_dir_files)] - r5r_jar_version <- sub("\\.jar", "", sub("r5r_", "", r5r_jar)) - r5r_jar_version <- gsub("_", "\\.", r5r_jar_version) + + r5r_jar_version <- r5r_env$r5_jar_version r5r_jar_path <- jar_dir_files_full_names[ grepl("\\/r5r_\\d_\\d_\\d*\\.jar", jar_dir_files_full_names) ] diff --git a/r-package/R/setup_r5.R b/r-package/R/setup_r5.R index 261845fb..51bdca9c 100644 --- a/r-package/R/setup_r5.R +++ b/r-package/R/setup_r5.R @@ -116,7 +116,7 @@ setup_r5 <- function(data_path, jar_file <- data.table::fifelse( temp_dir, file.path(tempdir(), filename), - file.path(tools::R_user_dir("r5r", which = "cache"), filename) + file.path( r5r_env$cache_dir, filename) ) # If there isn't a JAR already, download it diff --git a/r-package/man/r5r.Rd b/r-package/man/r5r.Rd index 7762dfbb..4b6fe2d1 100644 --- a/r-package/man/r5r.Rd +++ b/r-package/man/r5r.Rd @@ -32,7 +32,6 @@ Please check the vignettes on the \href{https://ipeagit.github.io/r5r/}{website} Useful links: \itemize{ \item \url{https://github.com/ipeaGIT/r5r} - \item \url{https://ipeagit.github.io/r5r/} \item Report bugs at \url{https://github.com/ipeaGIT/r5r/issues} } diff --git a/r-package/man/r5r_cache.Rd b/r-package/man/r5r_cache.Rd new file mode 100644 index 00000000..9f81f558 --- /dev/null +++ b/r-package/man/r5r_cache.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/r5r_cache.R +\name{r5r_cache} +\alias{r5r_cache} +\title{Manage cached files from the r5r package} +\usage{ +r5r_cache(list_files = TRUE, delete_file = NULL) +} +\arguments{ +\item{list_files}{Logical. Whether to print a message with the address of r5r +JAR files cached locally. Defaults to \code{TRUE}.} + +\item{delete_file}{String. The file name (basename) of a JAR file cached +locally that should be deleted. Defaults to \code{NULL}, so that no +file is deleted. If \code{delete_file = "all"}, then all cached files are +deleted.} +} +\value{ +A message indicating which file exist and/or which ones have been +deleted from local cache directory. +} +\description{ +Manage cached files from the r5r package +} +\examples{ +\dontshow{if (identical(tolower(Sys.getenv("NOT_CRAN")), "true")) (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +# list all files cached +r5r_cache(list_files = TRUE) + +# delete particular file +r5r_cache(delete_file = '2010_deaths') +\dontshow{\}) # examplesIf} +} +\concept{Cache data} diff --git a/r-package/tests/tests_rafa/test_rafa.R b/r-package/tests/tests_rafa/test_rafa.R index a571545d..70188f7c 100644 --- a/r-package/tests/tests_rafa/test_rafa.R +++ b/r-package/tests/tests_rafa/test_rafa.R @@ -762,6 +762,9 @@ lapply(X=docs, FUN = tools::showNonASCIIfile) library(tictoc) library(beepr) +# run only the tests +testthat::test_local() + # LOCAL utils::remove.packages('r5r') @@ -780,6 +783,7 @@ tictoc::tic() Sys.setenv(NOT_CRAN = "false") devtools::check(pkg = ".", cran = TRUE, env_vars = c(NOT_CRAN = "false")) tictoc::toc() +beepr::beep() devtools::check_win_release(pkg = ".") @@ -797,6 +801,14 @@ devtools::check(pkg = ".", cran = TRUE, env_vars = c(NOT_CRAN = "false")) tictoc::toc() +# extrachecks ----------------- +#' https://github.com/JosiahParry/extrachecks +#' remotes::install_github("JosiahParry/extrachecks") + +library(extrachecks) +extrachecks::extrachecks() + + # submit to CRAN ----------------- usethis::use_cran_comments('teste 2222, , asdadsad') diff --git a/r-package/tests/testthat/test-write_fare_structure.R b/r-package/tests/testthat/test-write_fare_structure.R index 91167be9..554e4971 100644 --- a/r-package/tests/testthat/test-write_fare_structure.R +++ b/r-package/tests/testthat/test-write_fare_structure.R @@ -31,6 +31,4 @@ test_that("written structure is identical to original", { }) # clean cache -jar_dir <- tools::R_user_dir("r5r", which = "cache") -f <- list.files(jar_dir, full.names = TRUE) -unlink(f, recursive = TRUE) +r5r::r5r_cache(delete_file = 'all') diff --git a/r-package/vignettes/r5r.Rmd b/r-package/vignettes/r5r.Rmd index b812b4fc..f7d1c029 100644 --- a/r-package/vignettes/r5r.Rmd +++ b/r-package/vignettes/r5r.Rmd @@ -364,9 +364,8 @@ rJava::.jgc(R.gc = TRUE) ```{r, eval = TRUE, include = FALSE, message = FALSE} # clean cache (CRAN policy) -jar_dir <- tools::R_user_dir("r5r", which = "cache") -f <- list.files(jar_dir, full.names = TRUE) -unlink(f, recursive = TRUE) +r5r::r5r_cache(delete_file = 'all') + ``` If you have any suggestions or want to report an error, please visit [the package GitHub page](https://github.com/ipeaGIT/r5r). diff --git a/r-package/vignettes/time_window.Rmd b/r-package/vignettes/time_window.Rmd index 6a092158..0b9e8129 100644 --- a/r-package/vignettes/time_window.Rmd +++ b/r-package/vignettes/time_window.Rmd @@ -194,8 +194,6 @@ The `detailed_itineraries()`, on the other hand, does not return travel times or - - ### Cleaning up after usage `r5r` objects are still allocated to any amount of memory previously set after they are done with their calculations. In order to remove an existing `r5r` object and reallocate the memory it had been using, we use the `stop_r5` function followed by a call to Java's garbage collector, as follows: diff --git a/r-package/vignettes/travel_time_matrix.Rmd b/r-package/vignettes/travel_time_matrix.Rmd index dcc926d1..2fade497 100644 --- a/r-package/vignettes/travel_time_matrix.Rmd +++ b/r-package/vignettes/travel_time_matrix.Rmd @@ -166,9 +166,7 @@ rJava::.jgc(R.gc = TRUE) ```{r, eval = TRUE, include = FALSE, message = FALSE} # clean cache (CRAN policy) -jar_dir <- tools::R_user_dir("r5r", which = "cache") -f <- list.files(jar_dir, full.names = TRUE) -unlink(f, recursive = TRUE) +r5r::r5r_cache(delete_file = 'all') ```