## git2r, R bindings to the libgit2 library.
## Copyright (C) 2013-2023 The git2r contributors
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License, version 2,
## as published by the Free Software Foundation.
##
## git2r is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along
## with this program; if not, write to the Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
library("git2r")
## For debugging
sessionInfo()
libgit2_version()
libgit2_features()
## Create a directory in tempdir
path <- tempfile(pattern = "git2r-")
dir.create(path)
## Initialize a repository
repo <- init(path)
## Config repository
cfg <- config(repo, user.name = "Alice", user.email = "alice@example.org")
## Check configuration
stopifnot(identical(print(cfg), cfg))
stopifnot("local" %in% names(cfg))
stopifnot("user.name" %in% names(cfg$local))
stopifnot(identical(cfg$local$user.name, "Alice"))
stopifnot(identical(cfg$local$user.email, "alice@example.org"))
## Check that config fails for non-character entry.
tools::assertError(config(repo, test = 5))
## Check config method with missing repo argument
wd <- setwd(path)
cfg <- config(user.name = "Alice", user.email = "alice@example.org")
stopifnot("local" %in% names(cfg))
stopifnot("user.name" %in% names(cfg$local))
stopifnot(identical(cfg$local$user.name, "Alice"))
stopifnot(identical(cfg$local$user.email, "alice@example.org"))
stopifnot(identical(git_config_files(repo = repo)$local,
git_config_files(repo = NULL)$local))
stopifnot(identical(git_config_files(repo = repo)$local,
git_config_files(repo = repo$path)$local))
if (!is.null(wd))
setwd(wd)
## Delete entries
cfg <- config(repo, user.name = NULL, user.email = NULL)
## Check configuration
stopifnot(is.null(cfg$local$user.name))
stopifnot(is.null(cfg$local$user.email))
## Supply values as objects
user_name <- "Alice"
user_email <- "alice@example.org"
cfg <- config(repo, user.name = user_name, user.email = "alice@example.org")
stopifnot(identical(cfg$local$user.name, user_name))
stopifnot(identical(cfg$local$user.email, "alice@example.org"))
cfg <- config(repo, user.name = "Alice", user.email = user_email)
stopifnot(identical(cfg$local$user.name, "Alice"))
stopifnot(identical(cfg$local$user.email, user_email))
## Check git config files
cfg <- git_config_files(repo)
stopifnot(identical(nrow(cfg), 4L))
stopifnot(identical(names(cfg), c("file", "path")))
stopifnot(identical(cfg$file, c("system", "xdg", "global", "local")))
stopifnot(!is.na(cfg$path[4]))
## Check that the local config file is NA for an invalid repo
## argument.
stopifnot(is.na(git_config_files(5)$local))
## Check location of .gitconfig on Windows
if (identical(Sys.getenv("APPVEYOR"), "True")) {
## AppVeyor diagnostics
str(Sys.getenv("USERPROFILE"))
str(Sys.getenv("HOMEDRIVE"))
str(normalizePath("~"))
str(git_config_files())
## Temporarily move AppVeyor .gitconfig
gitconfig_appveyor <- "C:/Users/appveyor/.gitconfig"
gitconfig_tmp <- file.path(tempdir(), ".gitconfig")
file.rename(gitconfig_appveyor, gitconfig_tmp)
## Test config() on Windows
gitconfig_expected <- file.path(Sys.getenv("USERPROFILE"), ".gitconfig")
## .gitconfig should not be created if no configuration options specified
config(global = TRUE)
stopifnot(!file.exists(gitconfig_expected))
## .gitconfig should be created in the user's home directory
config(global = TRUE, user.name = "name", user.email = "email")
stopifnot(file.exists(gitconfig_expected))
unlink(gitconfig_expected)
## .gitconfig should be created if user specifies option other than user.name
## and user.email
config(global = TRUE, core.editor = "nano")
stopifnot(file.exists(gitconfig_expected))
unlink(gitconfig_expected)
## .gitconfig should not create a new .gitconfig if the user already has one
## in Documents/
gitconfig_documents <- "~/.gitconfig"
file.create(gitconfig_documents)
config(global = TRUE, core.editor = "nano")
stopifnot(!file.exists(gitconfig_expected))
unlink(gitconfig_documents)
## Return AppVeyor .gitconfig
file.rename(gitconfig_tmp, gitconfig_appveyor)
}
## Cleanup
unlink(path, recursive = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.