test_that("parse_submodules works with a single submodule", {
x <-
'[submodule "foobar"]
path = baz
url = http://foo/bar'
expect_equal(
parse_submodules(x),
data.frame(
submodule = "foobar",
path = "baz",
url = "http://foo/bar",
branch = NA_character_,
stringsAsFactors = FALSE))
})
test_that("parse_submodules works multiple submodules", {
y <-
'[submodule "foobar"]
path = baz
url = http://foo/bar
[submodule "foofoo"]
path = bunny
url = http://little/bunny/foofoo
branch = forest'
expect_equal(
parse_submodules(y),
data.frame(
submodule = c("foobar", "foofoo"),
path = c("baz", "bunny"),
url = c("http://foo/bar", "http://little/bunny/foofoo"),
branch = c(NA_character_, "forest"),
stringsAsFactors = FALSE))
})
test_that("parse_submodules warns and returns empty for invalid submodules", {
x <-
'[submodule "foobar"]
path = baz'
expect_warning(regexp = "Invalid submodule definition",
expect_equal(
parse_submodules(x),
list()
)
)
y <-
'[submodule "foobar"]
path = baz
[submodule "foofoo"]
path = bunny
url = http://little/bunny/foofoo'
expect_warning(regexp = "Invalid submodule definition",
expect_equal(
parse_submodules(y),
list()
)
)
z <- '
# [submodule "foobar"] this one is commented out
# path = baz
# url = https://foo/bar'
expect_equal(
parse_submodules(z),
list()
)
})
test_that("Can install a repo with a submodule", {
if (is.null(git_path())) skip("git is not installed")
dir <- tempfile()
dir.create(dir)
on.exit(unlink(dir, recursive = TRUE, force = TRUE))
writeLines("foo <- 1", file.path(dir, "foo.R"))
in_dir(dir, {
git("init")
git(paste("add", "-A", "."))
git(paste(
# We need to temporarily set the user name and user email,
# in case they are not set
"-c", "user.name=foobar", "-c", paste0("user.email=", shQuote("<>")),
"commit", "-m", shQuote("Initial commit")))
})
sub <- tempfile()
dir.create(sub)
on.exit(unlink(sub,recursive=TRUE,force=TRUE),add=TRUE)
module <- file.path(sub, ".gitmodules")
writeLines(con = module,
sprintf(
'[submodule "foo"]
path = R
url = file://%s
[submodule "bar"]
path = bar
url = file://%s',
URLencode(dir),
URLencode(dir)
)
)
# The bar submodule is in .Rbuildignore, so we will not fetch it
build_ignore <- file.path(sub, ".Rbuildignore")
writeLines("^bar$", build_ignore)
update_submodules(sub, NULL, quiet = TRUE)
expect_true(dir.exists(file.path(sub, "R")))
expect_false(dir.exists(file.path(sub, "bar")))
# Now remove the R directory so we can try installing the full package
unlink(file.path(sub, "R"), recursive = TRUE, force = TRUE)
# Install the package to a temporary library and verify it works
lib <- tempfile()
on.exit(unlink(lib, recursive = TRUE, force = TRUE), add = TRUE)
dir.create(lib)
DESC_file <- file.path(sub,"DESCRIPTION")
writeLines("Package: submodule\nVersion: 0.0.0.9000",DESC_file)
install_local(sub, lib = lib, quiet = TRUE)
withr::with_libpaths(lib,
expect_equal(submodule::foo, 1)
)
})
test_that("Can update a submodule with an empty .gitmodules submodule", {
if (is.null(git_path())) skip("git is not installed")
dir <- tempfile()
dir.create(dir)
on.exit(unlink(dir, recursive = TRUE, force = TRUE))
sub <- tempfile()
dir.create(sub)
on.exit(unlink(sub, recursive=TRUE, force=TRUE), add=TRUE)
module <- file.path(sub, ".gitmodules")
writeLines(con = module,text = "")
# The bar submodule is in .Rbuildignore, so we will not fetch it
build_ignore <- file.path(sub, ".Rbuildignore")
writeLines("^bar$", build_ignore)
expect_error(
update_submodules(sub, NULL, quiet = TRUE),
NA
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.