Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support more remote types in use_dev_package. #1071

Merged
merged 6 commits into from
Mar 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# usethis (development version)

* `use_dev_package` now supports any remote of the form `type::username/repo` (@antoine-sachet, #1071)

* `use_release_issue()` reminds you to use it to re-generate `README.md`,
if needed (#767).

Expand Down
24 changes: 13 additions & 11 deletions R/package.R
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ use_remote <- function(package) {
return(invisible())
}

package_remote <- package_remote(package)
package_remote <- package_remote(desc::desc(package = package))
ui_done(
"Adding {ui_value(package_remote)} to {ui_field('Remotes')} field in DESCRIPTION"
)
Expand All @@ -62,19 +62,21 @@ use_remote <- function(package) {

# Helpers -----------------------------------------------------------------

## TO DO: make this less hard-wired to GitHub
package_remote <- function(package) {
desc <- desc::desc(package = package)
# @jimhester and @gaborscardi say that the Github* fields are basically
# legacy, e.g., to support older tools like packrat
# Remote* fields are the way to go now
github_info <- desc$get(c("RemoteType", "RemoteUsername", "RemoteRepo"))
package_remote <- function(desc) {
package <- desc$get_field("Package")
remote <- as.list(desc$get(c("RemoteType", "RemoteUsername", "RemoteRepo")))

if (!identical(github_info[["RemoteType"]], "github")) {
ui_stop("{ui_value(package)} was not installed from GitHub.")
is_valid_remote <- all(purrr::map_lgl(remote, ~ is_string(.x) && !is.na(.x)))
if (!is_valid_remote) {
ui_stop("{ui_value(package)} was not installed from a supported remote.")
}

glue::glue_data(as.list(github_info), "{RemoteUsername}/{RemoteRepo}")
# Github remotes don't get the 'RemoteType::' prefix
if (identical(remote$RemoteType, "github")) {
paste0(remote$RemoteUsername, "/", remote$RemoteRepo)
} else {
paste0(remote$RemoteType, "::", remote$RemoteUsername, "/", remote$RemoteRepo)
}
}

refuse_package <- function(package, verboten) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
context("use_package_doc")

test_that("use_package_doc() requires a package", {
scoped_temporary_project()
expect_false(has_package_doc())
Expand Down
26 changes: 26 additions & 0 deletions tests/testthat/test-package.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
test_that("use_package() won't facilitate dependency on tidyverse", {
scoped_temporary_package()
expect_usethis_error(use_package("tidyverse"), "rarely a good idea")
})


# use_dev_package() -----------------------------------------------------------

test_that("package_remote() extracts and generates correct strings", {
d <- desc::desc(text = c(
"Package: test",
"RemoteType: github",
"RemoteUsername: tidyverse",
"RemoteRepo: test"
))

expect_equal(package_remote(d), "tidyverse/test")

d$set(RemoteType = "GitLab")
expect_equal(package_remote(d), "GitLab::tidyverse/test")

d$del("RemoteType")
expect_error(package_remote(d), "supported remote")
})


6 changes: 0 additions & 6 deletions tests/testthat/test-use-package.R

This file was deleted.