From e364fd057e70df760daa686e92dae7973c8fb274 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Thu, 17 Oct 2019 10:45:16 -0500 Subject: [PATCH] Rename use_tidy_versions() to use_latest_dependencies() Fixes #771 --- NAMESPACE | 2 +- NEWS.md | 3 ++ R/latest-dependencies.R | 39 +++++++++++++++++++++++ R/tidyverse.R | 38 ---------------------- man/tidyverse.Rd | 10 ------ man/use_latest_dependencies.Rd | 20 ++++++++++++ tests/testthat/test-latest-dependencies.R | 22 +++++++++++++ tests/testthat/test-use-tidy.R | 23 ------------- 8 files changed, 85 insertions(+), 72 deletions(-) create mode 100644 R/latest-dependencies.R create mode 100644 man/use_latest_dependencies.Rd create mode 100644 tests/testthat/test-latest-dependencies.R diff --git a/NAMESPACE b/NAMESPACE index 76ff5b36b..eadf4ec38 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -106,6 +106,7 @@ export(use_github_release) export(use_gitlab_ci) export(use_gpl3_license) export(use_jenkins) +export(use_latest_dependencies) export(use_lgpl_license) export(use_lifecycle) export(use_lifecycle_badge) @@ -149,7 +150,6 @@ export(use_tidy_release_test_env) export(use_tidy_style) export(use_tidy_support) export(use_tidy_thanks) -export(use_tidy_versions) export(use_travis) export(use_travis_badge) export(use_tutorial) diff --git a/NEWS.md b/NEWS.md index 34dd1cfdb..1c9954768 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,8 @@ # usethis (development version) +* `use_tidy_version()` is now `use_latest_dependencies()` to better reflect + it's usage (#771). + * `create_package()` will now create a package in a symlink to a directory (#794). * `git_sitrep()` now reports project-specific user name and email, if set diff --git a/R/latest-dependencies.R b/R/latest-dependencies.R new file mode 100644 index 000000000..6ce371811 --- /dev/null +++ b/R/latest-dependencies.R @@ -0,0 +1,39 @@ +#' Use "latest" versions of all dependencies +#' +#' Pins minimum version of dependencies to latest (as determined by "source)" +#' Useful for tidyverse package, but should otherwise be used with extreme +#' care. +#' +#' @keywords internal +#' @export +#' @param overwrite By default (`FALSE`), only dependencies without version +#' specifications will be modified. Set to `TRUE` to modify all dependencies. +#' @param source Use "local" or "CRAN" package versions. +use_latest_dependencies <- function(overwrite = FALSE, source = c("local", "CRAN")) { + deps <- desc::desc_get_deps(proj_get()) + deps <- update_versions(deps, overwrite = overwrite, source = source) + desc::desc_set_deps(deps, file = proj_get()) + + invisible(TRUE) +} + +update_versions <- function(deps, overwrite = FALSE, source = c("local", "CRAN")) { + baserec <- base_and_recommended() + to_change <- !deps$package %in% c("R", baserec) + if (!overwrite) { + to_change <- to_change & deps$version == "*" + } + + packages <- deps$package[to_change] + versions <- switch(match.arg(source), + local = purrr::map_chr(packages, package_version), + CRAN = utils::available.packages()[packages, "Version"] + ) + deps$version[to_change] <- paste0(">= ", versions) + + deps +} + +package_version <- function(x) { + as.character(utils::packageVersion(x)) +} diff --git a/R/tidyverse.R b/R/tidyverse.R index 5612800d5..f334e5976 100644 --- a/R/tidyverse.R +++ b/R/tidyverse.R @@ -26,9 +26,6 @@ #' guide](https://style.tidyverse.org). This function will overwrite files! See #' below for usage advice. #' -#' * `use_tidy_versions()`: pins all dependencies to require at least -#' the currently installed version. -#' #' * `use_tidy_contributing()`: adds standard tidyverse contributing guidelines. #' #' * `use_tidy_issue_template()`: adds a standard tidyverse issue template. @@ -132,40 +129,6 @@ use_tidy_description <- function() { invisible(TRUE) } -#' @export -#' @rdname tidyverse -#' @param overwrite By default (`FALSE`), only dependencies without version -#' specifications will be modified. Set to `TRUE` to modify all dependencies. -#' @param source Use "local" or "CRAN" package versions. -use_tidy_versions <- function(overwrite = FALSE, source = c("local", "CRAN")) { - deps <- desc::desc_get_deps(proj_get()) - deps <- update_versions(deps, overwrite = overwrite, source = source) - desc::desc_set_deps(deps, file = proj_get()) - - invisible(TRUE) -} - -update_versions <- function(deps, overwrite = FALSE, source = c("local", "CRAN")) { - baserec <- base_and_recommended() - to_change <- !deps$package %in% c("R", baserec) - if (!overwrite) { - to_change <- to_change & deps$version == "*" - } - - packages <- deps$package[to_change] - versions <- switch(match.arg(source), - local = purrr::map_chr(packages, package_version), - CRAN = utils::available.packages()[packages, "Version"] - ) - deps$version[to_change] <- paste0(">= ", versions) - - deps -} - -package_version <- function(x) { - as.character(utils::packageVersion(x)) -} - #' @export #' @rdname tidyverse use_tidy_eval <- function() { @@ -179,7 +142,6 @@ use_tidy_eval <- function() { return(invisible(new)) } - #' @export #' @rdname tidyverse use_tidy_contributing <- function() { diff --git a/man/tidyverse.Rd b/man/tidyverse.Rd index bea178f18..6debc4cdf 100644 --- a/man/tidyverse.Rd +++ b/man/tidyverse.Rd @@ -5,7 +5,6 @@ \alias{create_tidy_package} \alias{use_tidy_ci} \alias{use_tidy_description} -\alias{use_tidy_versions} \alias{use_tidy_eval} \alias{use_tidy_contributing} \alias{use_tidy_support} @@ -22,8 +21,6 @@ use_tidy_ci(browse = interactive()) use_tidy_description() -use_tidy_versions(overwrite = FALSE, source = c("local", "CRAN")) - use_tidy_eval() use_tidy_contributing() @@ -51,11 +48,6 @@ individuals with \code{;}. You can supply a global default with \item{browse}{Open a browser window to enable automatic builds for the package.} -\item{overwrite}{By default (\code{FALSE}), only dependencies without version -specifications will be modified. Set to \code{TRUE} to modify all dependencies.} - -\item{source}{Use "local" or "CRAN" package versions.} - \item{strict}{Boolean indicating whether or not a strict version of styling should be applied. See \code{\link[styler:tidyverse_style]{styler::tidyverse_style()}} for details.} } @@ -80,8 +72,6 @@ dependencies. programming with the tidy eval toolkit. \item \code{use_tidy_style()}: styles source code according to the \href{https://style.tidyverse.org}{tidyverse style guide}. This function will overwrite files! See below for usage advice. -\item \code{use_tidy_versions()}: pins all dependencies to require at least -the currently installed version. \item \code{use_tidy_contributing()}: adds standard tidyverse contributing guidelines. \item \code{use_tidy_issue_template()}: adds a standard tidyverse issue template. \item \code{use_tidy_release_test_env()}: updates the test environment section in diff --git a/man/use_latest_dependencies.Rd b/man/use_latest_dependencies.Rd new file mode 100644 index 000000000..9eacf96e5 --- /dev/null +++ b/man/use_latest_dependencies.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/latest-dependencies.R +\name{use_latest_dependencies} +\alias{use_latest_dependencies} +\title{Use "latest" versions of all dependencies} +\usage{ +use_latest_dependencies(overwrite = FALSE, source = c("local", "CRAN")) +} +\arguments{ +\item{overwrite}{By default (\code{FALSE}), only dependencies without version +specifications will be modified. Set to \code{TRUE} to modify all dependencies.} + +\item{source}{Use "local" or "CRAN" package versions.} +} +\description{ +Pins minimum version of dependencies to latest (as determined by "source)" +Useful for tidyverse package, but should otherwise be used with extreme +care. +} +\keyword{internal} diff --git a/tests/testthat/test-latest-dependencies.R b/tests/testthat/test-latest-dependencies.R new file mode 100644 index 000000000..e9e355cab --- /dev/null +++ b/tests/testthat/test-latest-dependencies.R @@ -0,0 +1,22 @@ +test_that("use_tidy_versions() specifies a version for dependencies", { + pkg <- scoped_temporary_package() + use_package("usethis") + use_package("desc") + use_package("withr", "Suggests") + use_package("gh", "Suggests") + use_latest_dependencies() + desc <- readLines(proj_path("DESCRIPTION")) + desc <- grep("usethis|desc|withr|gh", desc, value = TRUE) + expect_true(all(grepl("\\(>= [0-9.]+\\)", desc))) +}) + +test_that("use_tidy_versions() does nothing for a base package", { + ## if we ever depend on a recommended package, could beef up this test a bit + pkg <- scoped_temporary_package() + use_package("tools") + use_package("stats", "Suggests") + use_latest_dependencies() + desc <- readLines(proj_path("DESCRIPTION")) + desc <- grep("tools|stats", desc, value = TRUE) + expect_false(any(grepl("\\(>= [0-9.]+\\)", desc))) +}) diff --git a/tests/testthat/test-use-tidy.R b/tests/testthat/test-use-tidy.R index ae2220b6f..728775633 100644 --- a/tests/testthat/test-use-tidy.R +++ b/tests/testthat/test-use-tidy.R @@ -12,29 +12,6 @@ test_that("use_tidy_description() alphabetises dependencies", { expect_gt(grep("withr", desc), grep("gh", desc)) }) -test_that("use_tidy_versions() specifies a version for dependencies", { - pkg <- scoped_temporary_package() - use_package("usethis") - use_package("desc") - use_package("withr", "Suggests") - use_package("gh", "Suggests") - use_tidy_versions() - desc <- readLines(proj_path("DESCRIPTION")) - desc <- grep("usethis|desc|withr|gh", desc, value = TRUE) - expect_true(all(grepl("\\(>= [0-9.]+\\)", desc))) -}) - -test_that("use_tidy_versions() does nothing for a base package", { - ## if we ever depend on a recommended package, could beef up this test a bit - pkg <- scoped_temporary_package() - use_package("tools") - use_package("stats", "Suggests") - use_tidy_versions() - desc <- readLines(proj_path("DESCRIPTION")) - desc <- grep("tools|stats", desc, value = TRUE) - expect_false(any(grepl("\\(>= [0-9.]+\\)", desc))) -}) - test_that("use_tidy_eval() inserts the template file and Imports rlang", { skip_if_not_installed("roxygen2")