diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..ea56e21
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,17 @@
+---
+name: Bug Report
+about: Create a report to help us improve
+---
+
+
+
+
+```r
+# replace this with your reproducible example
+```
+
+Session Info
+```r
+# replace this by with the output from sessioninfo::session_info() or sessionInfo()
+```
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..76d3db0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature Request
+about: Suggest an idea for this project
+---
+
+
+
+
+```r
+# a silly feature request, fails under the current implementation
+b <- 1 + 1
+stopifnot(all.equal(b == 3))
+```
+
+```r
+# testthat version of the silly feature request
+expect_equal(1 + 1, 3)
+```
diff --git a/.github/issue_template.md b/.github/issue_template.md
deleted file mode 100644
index 836f284..0000000
--- a/.github/issue_template.md
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-Session Info
-
-```r
-
-```
-
diff --git a/DESCRIPTION b/DESCRIPTION
index f51146a..d75d4c9 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,6 +1,6 @@
Package: git2rdata
Title: Store and Retrieve Data.frames in a Git Repository
-Version: 0.1
+Version: 0.1.0.9000
Authors@R: c(
person(
"Thierry", "Onkelinx", role = c("aut", "cre"),
diff --git a/NEWS.md b/NEWS.md
index c9b0325..72ad52a 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,16 @@
+git2rdata 0.1.0.9000 (2019-08-13)
+=================================
+
+### BREAKING FEATURES
+
+ * `write_vc()` and `read_vc()` fail when `file` is a location outside of `root` (#50).
+
+### NEW FEATURES
+
+ * Only require `upgrade_data()` for data written with versions prior to 0.0.5 (#44).
+ * Improve warnings() and error().
+ * Use vector version of logo.
+
git2rdata 0.1 (2019-06-04)
============================
diff --git a/R/clean_data_path.R b/R/clean_data_path.R
index 9d54957..2f83d6e 100644
--- a/R/clean_data_path.R
+++ b/R/clean_data_path.R
@@ -11,6 +11,10 @@
clean_data_path <- function(root, file, normalize = TRUE) {
assert_that(is.flag(normalize), noNA(normalize))
dir_name <- dirname(file)
+ if (length(grep("\\.\\.", dir_name))) {
+ stop("file should not contain '..'")
+ }
+
file <- gsub("\\..*$", "", basename(file))
if (dir_name == ".") {
path <- file.path(root, file)
diff --git a/R/is_git2rdata.R b/R/is_git2rdata.R
index 2cacef7..0aeaa87 100644
--- a/R/is_git2rdata.R
+++ b/R/is_git2rdata.R
@@ -17,7 +17,7 @@ is_git2rdata <- function(file, root = ".",
#' @export
is_git2rdata.default <- function(file, root, message) {
- stop("a 'root' of class ", class(root), " is not supported")
+ stop("a 'root' of class ", class(root), " is not supported", call. = FALSE)
}
#' @export
@@ -38,7 +38,8 @@ is_git2rdata.character <- function(file, root = ".",
if (!file.exists(file["raw_file"])) {
msg <- "Data file missing."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
@@ -50,13 +51,15 @@ is_git2rdata.character <- function(file, root = ".",
header <- readLines(file["raw_file"], n = 1, encoding = "UTF-8")
if (correct != header) {
msg <- paste("Corrupt data, incorrect header. Expecting:", correct)
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
if (meta_data[["..generic"]][["data_hash"]] != hashfile(file[["raw_file"]])) {
msg <- "Corrupt data, mismatching data hash."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
diff --git a/R/is_git2rmeta.R b/R/is_git2rmeta.R
index a1c5f3f..e01a103 100644
--- a/R/is_git2rmeta.R
+++ b/R/is_git2rmeta.R
@@ -23,7 +23,7 @@ is_git2rmeta <- function(file, root = ".",
#' @export
is_git2rmeta.default <- function(file, root,
message = c("none", "warning", "error")) {
- stop("a 'root' of class ", class(root), " is not supported")
+ stop("a 'root' of class ", class(root), " is not supported", call. = FALSE)
}
#' @export
@@ -39,7 +39,8 @@ is_git2rmeta.character <- function(file, root = ".",
if (!file.exists(file["meta_file"])) {
msg <- "Metadata file missing."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
@@ -47,36 +48,42 @@ is_git2rmeta.character <- function(file, root = ".",
meta_data <- read_yaml(file["meta_file"])
if (!has_name(meta_data, "..generic")) {
msg <- "No '..generic' element."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
if (!has_name(meta_data[["..generic"]], "hash")) {
msg <- "Corrupt metadata, no hash found."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
if (!has_name(meta_data[["..generic"]], "git2rdata")) {
msg <- "Data stored using an older version of `git2rdata`.
See `?upgrade_data()`."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
if (package_version(meta_data[["..generic"]][["git2rdata"]]) <
- packageVersion("git2rdata")) {
+ package_version("0.0.5")) {
msg <- "Data stored using an older version of `git2rdata`.
See `?upgrade_data()`."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
if (!has_name(meta_data[["..generic"]], "data_hash")) {
msg <- "Corrupt metadata, no data hash found."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
current_hash <- meta_data[["..generic"]][["hash"]]
if (current_hash != metadata_hash(meta_data)) {
msg <- "Corrupt metadata, mismatching hash."
- switch(message, error = stop(msg), warning = warning(msg))
+ switch(message, error = stop(msg, call. = FALSE),
+ warning = warning(msg, call. = FALSE))
return(FALSE)
}
diff --git a/R/list_data.R b/R/list_data.R
index bbb8c76..2a45602 100644
--- a/R/list_data.R
+++ b/R/list_data.R
@@ -40,7 +40,7 @@ list_data.character <- function(root = ".", path = ".", recursive = TRUE) {
FUN.VALUE = NA, root = root, message = "none")
if (any(!check)) {
warning("Invalid metadata files found. See ?is_git2rmeta():\n",
- paste(meta_files_base[!check], collapse = "\n"))
+ paste(meta_files_base[!check], collapse = "\n"), call. = FALSE)
}
meta_files <- meta_files[check]
data_files <- data_files[data_files %in% meta_files]
diff --git a/R/meta.R b/R/meta.R
index 86173bd..da9be6d 100644
--- a/R/meta.R
+++ b/R/meta.R
@@ -205,7 +205,7 @@ meta.data.frame <- function(x, optimize = TRUE, na = "NA", sorting, ...) {
# apply sorting
if (missing(sorting) || is.null(sorting) || !length(sorting)) {
- warning("No sorting applied.
+ warning(call. = FALSE, "No sorting applied.
Sorting is strongly recommended in combination with version control.")
} else {
assert_that(is.character(sorting))
@@ -218,7 +218,7 @@ Sorting is strongly recommended in combination with version control.")
sorted <- paste(sprintf("'%s'", sorting), collapse = ", ")
sorted <- sprintf("Sorting on %s results in ties.
Add extra sorting variables to ensure small diffs.", sorted)
- warning(sorted)
+ warning(sorted, call. = FALSE)
}
}
generic <- c(generic, sorting = list(sorting))
diff --git a/R/prune.R b/R/prune.R
index 88836ad..b9708d3 100644
--- a/R/prune.R
+++ b/R/prune.R
@@ -30,7 +30,7 @@ rm_data <- function(
rm_data.default <- function(
root, path = NULL, recursive = TRUE, ...
){
- stop("a 'root' of class ", class(root), " is not supported")
+ stop("a 'root' of class ", class(root), " is not supported", call. = FALSE)
}
#' @export
@@ -124,7 +124,7 @@ prune_meta <- function(
prune_meta.default <- function(
root, path = NULL, recursive = TRUE, ...
){
- stop("a 'root' of class ", class(root), " is not supported")
+ stop("a 'root' of class ", class(root), " is not supported", call. = FALSE)
}
#' @export
@@ -153,7 +153,7 @@ prune_meta.character <- function(
FUN.VALUE = NA, root = root, message = "none")
if (any(!check)) {
warning("Invalid metadata files found. See ?is_git2rmeta():\n",
- paste(to_do_base[!check], collapse = "\n"))
+ paste(to_do_base[!check], collapse = "\n"), call. = FALSE)
}
to_do <- to_do[check]
@@ -207,6 +207,7 @@ prune_meta.git_repository <- function(
changed <- gsub("\\.tsv$", ".yml", file.path(root_wd, changed, fsep = "/"))
if (any(to_do %in% changed)) {
stop(
+ call. = FALSE,
"cannot remove and stage metadata in combination with removed but unstaged data"
)
}
@@ -216,7 +217,8 @@ prune_meta.git_repository <- function(
))
changed <- gsub("\\.tsv$", ".yml", file.path(root_wd, changed, fsep = "/"))
if (any(to_do %in% changed)) {
- warning("data removed and staged, metadata removed but unstaged")
+ warning("data removed and staged, metadata removed but unstaged",
+ call. = FALSE)
}
}
file.remove(to_do)
diff --git a/R/read_vc.R b/R/read_vc.R
index f888823..fb01999 100644
--- a/R/read_vc.R
+++ b/R/read_vc.R
@@ -22,7 +22,7 @@ read_vc <- function(file, root = ".") {
#' @export
read_vc.default <- function(file, root) {
- stop("a 'root' of class ", class(root), " is not supported")
+ stop("a 'root' of class ", class(root), " is not supported", call. = FALSE)
}
#' @export
@@ -41,9 +41,10 @@ read_vc.character <- function(file, root = ".") {
root = root, message = "error"),
error = function(e) {
if (e$message == "Corrupt data, mismatching data hash.") {
- warning("Mismatching data hash. Data altered outside of git2rdata.")
+ warning("Mismatching data hash. Data altered outside of git2rdata.",
+ call. = FALSE)
} else {
- stop(e$message)
+ stop(e$message, call. = FALSE)
}
}
)
diff --git a/R/recent_commit.R b/R/recent_commit.R
index 792bea6..d2c392a 100644
--- a/R/recent_commit.R
+++ b/R/recent_commit.R
@@ -102,7 +102,7 @@ recent_commit.git_repository <- function(file, root, data = FALSE) {
blobs <- blobs[blobs$when == max(blobs$when), c("commit", "author", "when")]
blobs <- unique(blobs)
if (nrow(blobs) > 1) {
- warning("More than one commit within the same second")
+ warning("More than one commit within the same second", call. = FALSE)
}
rownames(blobs) <- NULL
blobs
diff --git a/R/relabel.R b/R/relabel.R
index 5c65b93..334f758 100644
--- a/R/relabel.R
+++ b/R/relabel.R
@@ -69,7 +69,8 @@ relabel <- function(file, root = ".", change) {
#' @export
relabel.default <- function(file, root, change) {
- stop("a 'change' of class ", class(change), " is not supported")
+ stop("a 'change' of class ", class(change), " is not supported",
+ call. = FALSE)
}
#' @export
@@ -94,7 +95,7 @@ relabel.list <- function(file, root = ".", change) {
optimize <- meta_data[["..generic"]][["optimize"]]
if (!optimize) {
stop("relabelling factors on verbose data leads to large diffs.
-Use write_vc() instead.")
+Use write_vc() instead.", call. = FALSE)
}
assert_that(
all(names(change) %in% names(meta_data)),
diff --git a/R/upgrade_data.R b/R/upgrade_data.R
index ec99d71..a10744e 100644
--- a/R/upgrade_data.R
+++ b/R/upgrade_data.R
@@ -72,8 +72,8 @@ upgrade_data.character <- function(
msg = paste(target, "has corrupt metadata, no hash found.")
)
if (has_name(meta_data[["..generic"]], "git2rdata")) {
- if (package_version(meta_data[["..generic"]][["git2rdata"]]) ==
- packageVersion("git2rdata")
+ if (package_version(meta_data[["..generic"]][["git2rdata"]]) >=
+ package_version("0.0.5")
) {
if (verbose) {
message(target, " already up to date")
diff --git a/R/write_vc.R b/R/write_vc.R
index ab7a9bc..67b11a9 100644
--- a/R/write_vc.R
+++ b/R/write_vc.R
@@ -7,6 +7,7 @@
#' @param file the name of the git2rdata object. Git2rdata objects cannot
#' have dots in their name. The name may include a relative path. `file` is a
#' path relative to the `root`.
+#' Note that `file` must point to a location within `root`.
#' @param root The root of a project. Can be a file path or a `git-repository`.
#' Defaults to the current working directory (`"."`).
#' @param sorting an optional vector of column names defining which columns to
@@ -27,7 +28,7 @@
#' @export
#' @family storage
#' @template example-io
-#' @note `..generic` is a reserved name for the metadata and cannot be used as
+#' @note `..generic` is a reserved name for the metadata and is a forbidden
#' column name in a `data.frame`.
write_vc <- function(
x, file, root = ".", sorting, strict = TRUE, optimize = TRUE, na = "NA",
@@ -67,7 +68,8 @@ write_vc.character <- function(
is_git2rmeta(file = remove_root(file = file["meta_file"], root = root),
root = root, message = "error"),
error = function(e) {
- stop(paste("Existing metadata file is invalid.", e$message, sep = "\n"))
+ stop(paste("Existing metadata file is invalid.", e$message, sep = "\n"),
+ call. = FALSE)
}
)
old <- read_yaml(file["meta_file"])
@@ -76,14 +78,18 @@ write_vc.character <- function(
old = old)
problems <- compare_meta(attr(raw_data, "meta"), old)
if (length(problems)) {
- if (strict) {
- problems <- c(
- "The data was not overwritten because of the issues below.",
+ problems <- c(
"See vignette('version_control', package = 'git2rdata') for more information.",
"", problems)
+ if (strict) {
+ problems <- c(
+ "The data was not overwritten because of the issues below.", problems)
stop(paste(problems, collapse = "\n"), call. = FALSE)
}
- warning(paste(problems, collapse = "\n"))
+ problems <- c(
+ "Changes in the metadata may lead to unnecessarily large diffs.",
+ problems)
+ warning(paste(problems, collapse = "\n"), call. = FALSE)
if (missing(sorting) && !is.null(old[["..generic"]][["sorting"]])) {
sorting <- old[["..generic"]][["sorting"]]
}
@@ -97,6 +103,9 @@ write_vc.character <- function(
col.names = TRUE, fileEncoding = "UTF-8"
)
meta_data <- attr(raw_data, "meta")
+ meta_data[["..generic"]][["git2rdata"]] <- as.character(
+ packageVersion("git2rdata")
+ )
meta_data[["..generic"]][["data_hash"]] <- hashfile(file["raw_file"])
write_yaml(meta_data, file["meta_file"],
fileEncoding = "UTF-8")
diff --git a/README.md b/README.md
index eff3d9b..ace6377 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,4 @@
-# The `git2rdata` package
-
+# The `git2rdata` package
[![CRAN status](https://www.r-pkg.org/badges/version/git2rdata)](https://cran.r-project.org/package=git2rdata)
diff --git a/codemeta.json b/codemeta.json
index 2b4c034..3f33af0 100644
--- a/codemeta.json
+++ b/codemeta.json
@@ -14,7 +14,7 @@
],
"issueTracker": "https://github.com/ropensci/git2rdata/issues",
"license": "https://spdx.org/licenses/GPL-3.0",
- "version": "0.1",
+ "version": "0.1.0.9000",
"programmingLanguage": {
"@type": "ComputerLanguage",
"name": "R",
@@ -196,7 +196,7 @@
],
"releaseNotes": "https://github.com/ropensci/git2rdata/blob/master/NEWS.md",
"readme": "https://github.com/ropensci/git2rdata/blob/master/README.md",
- "fileSize": "363.637KB",
+ "fileSize": "338.973KB",
"contIntegration": [
"https://travis-ci.org/inbo/git2rdata",
"https://ci.appveyor.com/project/ThierryO/git2rdata/branch/master",
diff --git a/man/figures/logo.png b/man/figures/logo.png
deleted file mode 100644
index 92550c2..0000000
Binary files a/man/figures/logo.png and /dev/null differ
diff --git a/man/figures/logo.svg b/man/figures/logo.svg
new file mode 100644
index 0000000..8c5cedc
--- /dev/null
+++ b/man/figures/logo.svg
@@ -0,0 +1,266 @@
+
+
+
+
diff --git a/man/git2rdata-package.Rd b/man/git2rdata-package.Rd
index d17b9fd..149b804 100644
--- a/man/git2rdata-package.Rd
+++ b/man/git2rdata-package.Rd
@@ -6,8 +6,6 @@
\alias{git2rdata-package}
\title{git2rdata: Store and Retrieve Data.frames in a Git Repository}
\description{
-\if{html}{\figure{logo.png}{options: align='right'}}
-
Make versioning of data.frame easy and efficient using git repositories.
}
\seealso{
diff --git a/man/is_git2rdata.Rd b/man/is_git2rdata.Rd
index d75e415..df01b44 100644
--- a/man/is_git2rdata.Rd
+++ b/man/is_git2rdata.Rd
@@ -9,7 +9,8 @@ is_git2rdata(file, root = ".", message = c("none", "warning", "error"))
\arguments{
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.
Defaults to the current working directory (\code{"."}).}
diff --git a/man/is_git2rmeta.Rd b/man/is_git2rmeta.Rd
index 74222e2..b86ab4a 100644
--- a/man/is_git2rmeta.Rd
+++ b/man/is_git2rmeta.Rd
@@ -9,7 +9,8 @@ is_git2rmeta(file, root = ".", message = c("none", "warning", "error"))
\arguments{
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.
Defaults to the current working directory (\code{"."}).}
diff --git a/man/read_vc.Rd b/man/read_vc.Rd
index f23ae09..5241730 100644
--- a/man/read_vc.Rd
+++ b/man/read_vc.Rd
@@ -9,7 +9,8 @@ read_vc(file, root = ".")
\arguments{
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.
Defaults to the current working directory (\code{"."}).}
diff --git a/man/recent_commit.Rd b/man/recent_commit.Rd
index 8e193d5..4f2ba37 100644
--- a/man/recent_commit.Rd
+++ b/man/recent_commit.Rd
@@ -9,7 +9,8 @@ recent_commit(file, root, data = FALSE)
\arguments{
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.}
diff --git a/man/relabel.Rd b/man/relabel.Rd
index 2728291..03dc544 100644
--- a/man/relabel.Rd
+++ b/man/relabel.Rd
@@ -9,7 +9,8 @@ relabel(file, root = ".", change)
\arguments{
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.
Defaults to the current working directory (\code{"."}).}
diff --git a/man/upgrade_data.Rd b/man/upgrade_data.Rd
index 17674cc..1d34204 100644
--- a/man/upgrade_data.Rd
+++ b/man/upgrade_data.Rd
@@ -13,7 +13,8 @@ upgrade_data(file, root = ".", verbose, ..., path)
\arguments{
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.
Defaults to the current working directory (\code{"."}).}
diff --git a/man/write_vc.Rd b/man/write_vc.Rd
index ce43ad8..8bfa62c 100644
--- a/man/write_vc.Rd
+++ b/man/write_vc.Rd
@@ -16,7 +16,8 @@ write_vc(x, file, root = ".", sorting, strict = TRUE,
\item{file}{the name of the git2rdata object. Git2rdata objects cannot
have dots in their name. The name may include a relative path. \code{file} is a
-path relative to the \code{root}.}
+path relative to the \code{root}.
+Note that \code{file} must point to a location within \code{root}.}
\item{root}{The root of a project. Can be a file path or a \code{git-repository}.
Defaults to the current working directory (\code{"."}).}
@@ -55,7 +56,7 @@ data as a plain text tab separated file. The \code{".yml"} contains the metadata
on the columns in plain text YAML format. See \code{vignette("plain text", package = "git2rdata")} for more details on the implementation.
}
\note{
-\code{..generic} is a reserved name for the metadata and cannot be used as
+\code{..generic} is a reserved name for the metadata and is a forbidden
column name in a \code{data.frame}.
}
\examples{
diff --git a/pkgdown/favicon/apple-touch-icon-120x120.png b/pkgdown/favicon/apple-touch-icon-120x120.png
index b0c6ee1..f87b943 100644
Binary files a/pkgdown/favicon/apple-touch-icon-120x120.png and b/pkgdown/favicon/apple-touch-icon-120x120.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-152x152.png b/pkgdown/favicon/apple-touch-icon-152x152.png
index 23a3f0c..9da15c0 100644
Binary files a/pkgdown/favicon/apple-touch-icon-152x152.png and b/pkgdown/favicon/apple-touch-icon-152x152.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-180x180.png b/pkgdown/favicon/apple-touch-icon-180x180.png
index bc7c5b7..0eb9a6b 100644
Binary files a/pkgdown/favicon/apple-touch-icon-180x180.png and b/pkgdown/favicon/apple-touch-icon-180x180.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-60x60.png b/pkgdown/favicon/apple-touch-icon-60x60.png
index c166029..9b2c876 100644
Binary files a/pkgdown/favicon/apple-touch-icon-60x60.png and b/pkgdown/favicon/apple-touch-icon-60x60.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-76x76.png b/pkgdown/favicon/apple-touch-icon-76x76.png
index 680a148..4207b4a 100644
Binary files a/pkgdown/favicon/apple-touch-icon-76x76.png and b/pkgdown/favicon/apple-touch-icon-76x76.png differ
diff --git a/pkgdown/favicon/apple-touch-icon.png b/pkgdown/favicon/apple-touch-icon.png
index bc7c5b7..0eb9a6b 100644
Binary files a/pkgdown/favicon/apple-touch-icon.png and b/pkgdown/favicon/apple-touch-icon.png differ
diff --git a/pkgdown/favicon/favicon-16x16.png b/pkgdown/favicon/favicon-16x16.png
index 3031fcd..e186462 100644
Binary files a/pkgdown/favicon/favicon-16x16.png and b/pkgdown/favicon/favicon-16x16.png differ
diff --git a/pkgdown/favicon/favicon-32x32.png b/pkgdown/favicon/favicon-32x32.png
index eb55084..b021c0f 100644
Binary files a/pkgdown/favicon/favicon-32x32.png and b/pkgdown/favicon/favicon-32x32.png differ
diff --git a/pkgdown/favicon/favicon.ico b/pkgdown/favicon/favicon.ico
index 6c4da87..98786ca 100644
Binary files a/pkgdown/favicon/favicon.ico and b/pkgdown/favicon/favicon.ico differ
diff --git a/tests/testthat/test_a_basics.R b/tests/testthat/test_a_basics.R
index ea9715d..af138b3 100644
--- a/tests/testthat/test_a_basics.R
+++ b/tests/testthat/test_a_basics.R
@@ -12,6 +12,14 @@ expect_error(read_vc(root = 1), "a 'root' of class numeric is not supported")
root <- tempfile(pattern = "git2rdata-basic")
dir.create(root)
expect_false(any(file.exists(git2rdata:::clean_data_path(root, "test"))))
+expect_error(
+ git2rdata:::clean_data_path(root, "../wrong_location"),
+ "file should not contain '..'"
+)
+expect_error(
+ git2rdata:::clean_data_path(root, "./../wrong_location"),
+ "file should not contain '..'"
+)
expect_is(
output <- write_vc(
x = test_data, file = "test.txt", root = root, sorting = "test_Date"