[med-svn] [r-cran-blob] 04/06: New upstream version 1.1.0

Andreas Tille tille at debian.org
Wed Nov 29 13:55:09 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository r-cran-blob.

commit fc1682252043971393a63a145686ba90318967dc
Author: Andreas Tille <tille at debian.org>
Date:   Wed Nov 29 14:51:32 2017 +0100

    New upstream version 1.1.0
---
 DESCRIPTION                        | 29 ++++++++++++++++++
 MD5                                | 15 +++++++++
 NAMESPACE                          | 24 +++++++++++++++
 NEWS.md                            | 12 ++++++++
 R/accessors.R                      | 27 ++++++++++++++++
 R/blob.R                           | 63 ++++++++++++++++++++++++++++++++++++++
 R/format.R                         | 49 +++++++++++++++++++++++++++++
 R/missing.R                        | 14 +++++++++
 R/util.R                           | 14 +++++++++
 README.md                          | 38 +++++++++++++++++++++++
 debian/README.test                 | 10 ------
 debian/changelog                   | 13 --------
 debian/compat                      |  1 -
 debian/control                     | 26 ----------------
 debian/copyright                   | 26 ----------------
 debian/r-cran-blob.docs            |  3 --
 debian/rules                       |  5 ---
 debian/source/format               |  1 -
 debian/tests/control               |  9 ------
 debian/tests/generic               |  7 -----
 debian/tests/run-unit-test         | 17 ----------
 debian/watch                       |  2 --
 man/blob.Rd                        | 33 ++++++++++++++++++++
 tests/testthat.R                   |  4 +++
 tests/testthat/test-accessors.R    | 24 +++++++++++++++
 tests/testthat/test-construction.R |  7 +++++
 tests/testthat/test-format.R       | 43 ++++++++++++++++++++++++++
 tests/testthat/test-missing.R      | 13 ++++++++
 28 files changed, 409 insertions(+), 120 deletions(-)

diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 0000000..e27eb6c
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,29 @@
+Package: blob
+Title: A Simple S3 Class for Representing Vectors of Binary Data
+        ('BLOBS')
+Version: 1.1.0
+Authors at R: c(
+    person("Hadley", "Wickham", role = c("aut")),
+    person("Kirill", "Müller", , "krlmlr+r at mailbox.org", role = c("cre")),
+    person("RStudio", role = "cph")
+  )
+Description: R's raw vector is useful for storing a single binary object.
+    What if you want to put a vector of them in a data frame? The blob
+    package provides the blob object, a list of raw vectors, suitable for
+    use as a column in data frame.
+Imports: tibble
+License: GPL-3
+Encoding: UTF-8
+LazyData: true
+URL: https://github.com/hadley/blob
+BugReports: https://github.com/hadley/blob/issues
+Suggests: testthat, covr
+RoxygenNote: 6.0.1
+NeedsCompilation: no
+Packaged: 2017-06-17 04:01:59 UTC; muelleki
+Author: Hadley Wickham [aut],
+  Kirill Müller [cre],
+  RStudio [cph]
+Maintainer: Kirill Müller <krlmlr+r at mailbox.org>
+Repository: CRAN
+Date/Publication: 2017-06-17 14:57:46 UTC
diff --git a/MD5 b/MD5
new file mode 100644
index 0000000..8b97a65
--- /dev/null
+++ b/MD5
@@ -0,0 +1,15 @@
+7a10119e6809dda7a09988f373fe1979 *DESCRIPTION
+a70b94cf9c447530d8067af264787859 *NAMESPACE
+ecbf768d48f1a7ae3d69dbeb3d82724a *NEWS.md
+6db389b19ecd09d07b1a43ff03b70740 *R/accessors.R
+2f56178958c9a14ad503bbb8bd8fd0d6 *R/blob.R
+a19880454681cf2ace5b3be0e7b94a3c *R/format.R
+4aa476aef7a176a52f9559ba9742e347 *R/missing.R
+c85552e139c9e7fc2f9d332b86e5e4fc *R/util.R
+8fb575be9a5c8c5dbd7234f8b49bd81e *README.md
+2478bf628f24a684bf4056188c8715a6 *man/blob.Rd
+c37a14165e8d4b49908e517ea43960a7 *tests/testthat.R
+a1448eb53a4e9f79848795c3e8137620 *tests/testthat/test-accessors.R
+1a9850bdf5e584fb97ec983449bee362 *tests/testthat/test-construction.R
+afa75bcf2cbf61caf2ac91047f132c7e *tests/testthat/test-format.R
+57ce330853933b01f31f9b4413042b58 *tests/testthat/test-missing.R
diff --git a/NAMESPACE b/NAMESPACE
new file mode 100644
index 0000000..45d4185
--- /dev/null
+++ b/NAMESPACE
@@ -0,0 +1,24 @@
+# Generated by roxygen2: do not edit by hand
+
+S3method("[",blob)
+S3method("[<-",blob)
+S3method("[[<-",blob)
+S3method("is.na<-",blob)
+S3method(as.blob,blob)
+S3method(as.blob,character)
+S3method(as.blob,integer)
+S3method(as.blob,list)
+S3method(as.blob,raw)
+S3method(as.data.frame,blob)
+S3method(format,blob)
+S3method(is.na,blob)
+S3method(is_vector_s3,blob)
+S3method(obj_sum,blob)
+S3method(print,blob)
+S3method(type_sum,blob)
+export(as.blob)
+export(blob)
+export(new_blob)
+importFrom(tibble,is_vector_s3)
+importFrom(tibble,obj_sum)
+importFrom(tibble,type_sum)
diff --git a/NEWS.md b/NEWS.md
new file mode 100644
index 0000000..ce3787b
--- /dev/null
+++ b/NEWS.md
@@ -0,0 +1,12 @@
+# blob 1.1.0 (2017-06-17)
+
+- New maintainer: Kirill Müller.
+
+- Added `as.blob.blob()`and `as.data.frame.blob()` methods (#3).
+
+- Size of very large blobs is displayed correctly.
+
+
+# blob 1.0.0
+
+- Initial release.
diff --git a/R/accessors.R b/R/accessors.R
new file mode 100644
index 0000000..a5a3ef0
--- /dev/null
+++ b/R/accessors.R
@@ -0,0 +1,27 @@
+#' @export
+`[.blob` <- function(x, i, ...) {
+  new_blob(NextMethod())
+}
+
+#' @export
+`[<-.blob` <- function(x, i, ..., value) {
+  if (!is_raw_list(value)) {
+    stop("RHS must be list of raw vectors", call. = FALSE)
+  }
+
+  NextMethod()
+}
+
+#' @export
+`[[<-.blob` <- function(x, i, ..., value) {
+  if (!is.raw(value) && !is.null(value)) {
+    stop("RHS must be raw vector or NULL", call. = FALSE)
+  }
+
+  if (is.null(value)) {
+    x[i] <- list(NULL)
+    x
+  } else {
+    NextMethod()
+  }
+}
diff --git a/R/blob.R b/R/blob.R
new file mode 100644
index 0000000..478171a
--- /dev/null
+++ b/R/blob.R
@@ -0,0 +1,63 @@
+#' Construct a blob object
+#'
+#' \code{new_blob} is a low-level constructor that takes a list of
+#' raw vectors. \code{blob} constructs a blob from individual raw vectors,
+#' and \code{as.blob} is a S3 generic that converts existing objects.
+#'
+#' @param ... Individual raw vectors
+#' @param x A list of raw vectors, or other object to coerce
+#' @export
+#' @examples
+#' x1 <- charToRaw("Good morning")
+#' x2 <- as.raw(c(0x48, 0x65, 0x6c, 0x6c, 0x6f))
+#'
+#' new_blob(list(x1, x2))
+#' blob(x1, x2)
+#'
+#' as.blob(c("Good morning", "Good evening"))
+blob <- function(...) {
+  new_blob(list(...))
+}
+
+#' @export
+#' @rdname blob
+new_blob <- function(x) {
+  if (!is_raw_list(x)) {
+    stop("`x` must be a list of raw vectors", call. = FALSE)
+  }
+  structure(x, class = "blob")
+}
+
+#' @export
+#' @rdname blob
+as.blob <- function(x, ...) {
+  UseMethod("as.blob")
+}
+
+#' @export
+as.blob.blob <- function(x, ...) {
+  x
+}
+
+#' @export
+as.blob.list <- function(x, ...) {
+  new_blob(x)
+}
+
+#' @export
+as.blob.raw <- function(x, ...) {
+  new_blob(list(x))
+}
+
+#' @export
+as.blob.character <- function(x, ...) {
+  new_blob(lapply(x, charToRaw))
+}
+
+#' @export
+as.blob.integer <- function(x, ...) {
+  new_blob(lapply(x, as.raw))
+}
+
+#' @export
+as.data.frame.blob <- as.data.frame.difftime
diff --git a/R/format.R b/R/format.R
new file mode 100644
index 0000000..c214e0b
--- /dev/null
+++ b/R/format.R
@@ -0,0 +1,49 @@
+#' @export
+format.blob <- function(x, ...) {
+  if (length(x) == 0)
+    return(character())
+
+  ifelse(is.na(x), "<NA>", paste0("blob[", blob_size(x, ...) , "]"))
+}
+
+#' @export
+print.blob <- function(x, ...) {
+  if (length(x) == 0) {
+    cat("blob()\n")
+  } else {
+    print(format(x, ...), quote = FALSE)
+  }
+}
+
+#' @export
+#' @importFrom tibble type_sum
+type_sum.blob <- function(x) {
+  "blob"
+}
+
+#' @export
+#' @importFrom tibble obj_sum
+obj_sum.blob <- function(x) {
+  format(x, trim = FALSE)
+}
+
+#' @export
+#' @importFrom tibble is_vector_s3
+is_vector_s3.blob <- function(x) TRUE
+
+blob_size <- function(x, digits = 3, trim = TRUE, ...) {
+  x <- vapply(x, length, numeric(1))
+
+  units <- c("kb", "Mb", "Gb", "Tb")
+  power <- min(floor(log(abs(x), 1000)), length(units))
+  if (power < 1) {
+    unit <- "B"
+  } else {
+    unit <- units[[power]]
+    x <- x / (1024 ^ power)
+  }
+
+  x1 <- signif(x, digits = digits %||% 3)
+  x2 <- format(x1, big.mark = ",", scientific = FALSE, trim = trim)
+  paste0(x2, " ", unit)
+}
diff --git a/R/missing.R b/R/missing.R
new file mode 100644
index 0000000..c36fcbb
--- /dev/null
+++ b/R/missing.R
@@ -0,0 +1,14 @@
+#' @export
+is.na.blob <- function(x) {
+  vapply(x, is.null, logical(1))
+}
+
+#' @export
+`is.na<-.blob` <- function(x, value) {
+  if (!is.logical(value) || length(x) != length(value)) {
+    stop("RHS must be a logical the same length as `x`", call. = FALSE)
+  }
+
+  x[value] <- rep(list(NULL), sum(value))
+  x
+}
diff --git a/R/util.R b/R/util.R
new file mode 100644
index 0000000..5953dd7
--- /dev/null
+++ b/R/util.R
@@ -0,0 +1,14 @@
+is_raw_list <- function(x) {
+  if (!is.list(x))
+    return(FALSE)
+
+  raw <- vapply(x, is.raw, logical(1))
+  null <- vapply(x, is.null, logical(1))
+
+  if (!all(raw | null))
+    return(FALSE)
+
+  TRUE
+}
+
+`%||%` <- function(x, y) if (is.null(x)) y else x
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..05c8763
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+
+[![Travis-CI Build Status](https://travis-ci.org/tidyverse/blob.svg?branch=master)](https://travis-ci.org/tidyverse/blob) [![CRAN\_Status\_Badge](http://www.r-pkg.org/badges/version/blob)](https://cran.r-project.org/package=blob) [![Coverage Status](https://codecov.io/gh/tidyverse/blob/branch/master/graph/badge.svg)](https://codecov.io/github/tidyverse/blob?branch=master)
+
+<!-- README.md is generated from README.Rmd. Please edit that file -->
+blob
+====
+
+The goal of blob is to provide a simple S3 class to represent a vector of binary objects, aka blobs. The `blob` class is a lightweight wrapper around a list of raw vectors, suitable for inclusion in a data frame.
+
+In most cases you will not need to use this package explicitly: it will be used transparently by packages that need to load BLOB columns from databases or binary file formats.
+
+Installation
+------------
+
+You can install blob from github with:
+
+``` r
+# install.packages("devtools")
+devtools::install_github("tidyverse/blob")
+```
+
+Example
+-------
+
+To create a blob, use `blob()`, `new_blob()` or `as.blob()`:
+
+``` r
+x1 <- charToRaw("Good morning")
+x2 <- as.raw(c(0x48, 0x65, 0x6c, 0x6c, 0x6f))
+
+new_blob(list(x1, x2))
+#> [1] blob[12 B] blob[5 B]
+blob(x1, x2)
+#> [1] blob[12 B] blob[5 B]
+
+as.blob(c("Good morning", "Good evening"))
+#> [1] blob[12 B] blob[12 B]
+```
diff --git a/debian/README.test b/debian/README.test
deleted file mode 100644
index 4dbc14d..0000000
--- a/debian/README.test
+++ /dev/null
@@ -1,10 +0,0 @@
-Notes on how this package can be tested.
-────────────────────────────────────────
-
-To run the unit tests provided by the package you can do
-
-   sh run-unit-test
-
-in this directory.
-
- -- Andreas Tille <tille at debian.org>  Sat, 26 Aug 2017 00:10:39 +0200
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index 17ac48a..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,13 +0,0 @@
-r-cran-blob (1.1.0-2) unstable; urgency=medium
-
-  * Team upload.
-  * Rebuild for r-api-3.4 transition.
-  * Bump Standards-Version to 4.1.1.
-
- -- Sébastien Villemot <sebastien at debian.org>  Sat, 30 Sep 2017 18:54:08 +0200
-
-r-cran-blob (1.1.0-1) unstable; urgency=medium
-
-  * Initial release (closes: #873272)
-
- -- Andreas Tille <tille at debian.org>  Sat, 26 Aug 2017 00:33:36 +0200
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index f599e28..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/debian/control b/debian/control
deleted file mode 100644
index f4a59c9..0000000
--- a/debian/control
+++ /dev/null
@@ -1,26 +0,0 @@
-Source: r-cran-blob
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Andreas Tille <tille at debian.org>
-Section: gnu-r
-Priority: optional
-Build-Depends: debhelper (>= 10),
-               dh-r,
-               r-base-dev,
-               r-cran-tibble
-Standards-Version: 4.1.1
-Vcs-Browser: https://anonscm.debian.org/viewvc/debian-med/trunk/packages/R/r-cran-blob/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/R/r-cran-blob/trunk/
-Homepage: https://cran.r-project.org/package=blob
-
-Package: r-cran-blob
-Architecture: all
-Depends: ${R:Depends},
-         ${shlibs:Depends},
-         ${misc:Depends}
-Recommends: ${R:Recommends}
-Suggests: ${R:Suggests}
-Description: GNU R S3 Class for Representing Vectors of Binary Data ('BLOBS')
- R's raw vector is useful for storing a single binary object.
- What if you want to put a vector of them in a data frame? The blob
- package provides the blob object, a list of raw vectors, suitable for
- use as a column in data frame.
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index bca8692..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,26 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: blob
-Upstream-Contact: Kirill Müller <krlmlr+r at mailbox.org>
-Source: https://cran.r-project.org/package=blob
-
-Files: *
-Copyright: Hadley Wickham, Kirill Müller, RStudio
-License: GPL-3
-
-Files: debian/*
-Copyright: 2017 Andreas Tille <tille at debian.org>
-License: GPL-3
-
-License: GPL-3
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; version 3 of the License.
- .
-    This program 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.
- .
- On Debian systems, the complete text of the GNU General Public
- License can be found in `/usr/share/common-licenses/GPL-3'.
-
diff --git a/debian/r-cran-blob.docs b/debian/r-cran-blob.docs
deleted file mode 100644
index 6466d39..0000000
--- a/debian/r-cran-blob.docs
+++ /dev/null
@@ -1,3 +0,0 @@
-debian/tests/run-unit-test
-debian/README.test
-tests
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 529c38a..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/make -f
-
-%:
-	dh $@ --buildsystem R
-
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/tests/control b/debian/tests/control
deleted file mode 100644
index 0cef8c2..0000000
--- a/debian/tests/control
+++ /dev/null
@@ -1,9 +0,0 @@
-Tests: run-unit-test
-Depends: @, r-cran-testthat,
-Restrictions: allow-stderr
-
-Tests: generic
-Depends: @, r-cran-testthat,
-Restrictions: allow-stderr
-
-
diff --git a/debian/tests/generic b/debian/tests/generic
deleted file mode 100644
index eb39c8e..0000000
--- a/debian/tests/generic
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh -e
-
-for testfile in tests/*.R; do
-    echo "BEGIN TEST $testfile"
-    LC_ALL=C R --no-save < $testfile
-done
-
diff --git a/debian/tests/run-unit-test b/debian/tests/run-unit-test
deleted file mode 100644
index 88f6f20..0000000
--- a/debian/tests/run-unit-test
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh -e
-
-pkgname=blob
-debname=r-cran-blob
-
-if [ "$ADTTMP" = "" ] ; then
-    ADTTMP=`mktemp -d /tmp/${debname}-test.XXXXXX`
-    trap "rm -rf $ADTTMP" 0 INT QUIT ABRT PIPE TERM
-fi
-cd $ADTTMP
-cp -a /usr/share/doc/$debname/tests/* $ADTTMP
-gunzip -r *
-for testfile in *.R; do
-    echo "BEGIN TEST $testfile"
-    LC_ALL=C R --no-save < $testfile
-done
-
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 1cf54a8..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=4
-https://cran.r-project.org/src/contrib/blob_([-\d.]*)\.tar\.gz
diff --git a/man/blob.Rd b/man/blob.Rd
new file mode 100644
index 0000000..5ccfd2c
--- /dev/null
+++ b/man/blob.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/blob.R
+\name{blob}
+\alias{blob}
+\alias{new_blob}
+\alias{as.blob}
+\title{Construct a blob object}
+\usage{
+blob(...)
+
+new_blob(x)
+
+as.blob(x, ...)
+}
+\arguments{
+\item{...}{Individual raw vectors}
+
+\item{x}{A list of raw vectors, or other object to coerce}
+}
+\description{
+\code{new_blob} is a low-level constructor that takes a list of
+raw vectors. \code{blob} constructs a blob from individual raw vectors,
+and \code{as.blob} is a S3 generic that converts existing objects.
+}
+\examples{
+x1 <- charToRaw("Good morning")
+x2 <- as.raw(c(0x48, 0x65, 0x6c, 0x6c, 0x6f))
+
+new_blob(list(x1, x2))
+blob(x1, x2)
+
+as.blob(c("Good morning", "Good evening"))
+}
diff --git a/tests/testthat.R b/tests/testthat.R
new file mode 100644
index 0000000..1137369
--- /dev/null
+++ b/tests/testthat.R
@@ -0,0 +1,4 @@
+library(testthat)
+library(blob)
+
+test_check("blob")
diff --git a/tests/testthat/test-accessors.R b/tests/testthat/test-accessors.R
new file mode 100644
index 0000000..af750c9
--- /dev/null
+++ b/tests/testthat/test-accessors.R
@@ -0,0 +1,24 @@
+context("accessors")
+
+test_that("subsetting blob returns blob", {
+  x <- as.blob(1:5)
+  expect_s3_class(x[1], "blob")
+})
+
+test_that("can't insert objects of incorrect type", {
+  x <- as.blob(1:5)
+
+  expect_error(x[[1]] <- 1, "must be raw vector")
+  expect_error(x[1] <- 1, "must be list of raw vectors")
+})
+
+test_that("can insert raw or NULL", {
+  x <- as.blob(1:4)
+
+  x[[1]] <- as.raw(0)
+  x[2] <- list(as.raw(0))
+  x[[3]] <- NULL
+  x[4] <- list(NULL)
+
+  expect_equal(x, blob(as.raw(0), as.raw(0), NULL, NULL))
+})
diff --git a/tests/testthat/test-construction.R b/tests/testthat/test-construction.R
new file mode 100644
index 0000000..407c21a
--- /dev/null
+++ b/tests/testthat/test-construction.R
@@ -0,0 +1,7 @@
+context("construction")
+
+test_that("input must be list of raw blobs", {
+  expect_error(new_blob(1), "must be a list of raw vectors")
+  expect_error(new_blob(list(1)), "must be a list of raw vectors")
+  expect_error(new_blob(list(1, as.raw(1))), "must be a list of raw vectors")
+})
diff --git a/tests/testthat/test-format.R b/tests/testthat/test-format.R
new file mode 100644
index 0000000..00799f4
--- /dev/null
+++ b/tests/testthat/test-format.R
@@ -0,0 +1,43 @@
+context("format")
+
+expect_format_equal <- function(formatted, result) {
+  expect_equal(
+    paste(formatted, collapse = "\n"),
+    paste(result, collapse = "\n")
+  )
+}
+
+test_that("unequal sizes", {
+  x <- blob(raw(2 ** 2), raw(2 ** 11), raw(2 ** 20))
+
+  expect_format_equal(
+    format(x),
+    c(
+      "blob[4 B]",
+      "blob[2,050 B]",
+      "blob[1,050,000 B]"
+    )
+  )
+
+  expect_format_equal(
+    format(x, trim = FALSE),
+    c(
+      "blob[        4 B]",
+      "blob[    2,050 B]",
+      "blob[1,050,000 B]"
+    )
+  )
+})
+
+test_that("similar sizes", {
+  x <- blob(raw(2 ** 10), raw(2 ** 11), raw(2 ** 12))
+
+  expect_format_equal(
+    format(x),
+    c(
+      "blob[1 kb]",
+      "blob[2 kb]",
+      "blob[4 kb]"
+    )
+  )
+})
diff --git a/tests/testthat/test-missing.R b/tests/testthat/test-missing.R
new file mode 100644
index 0000000..97cde21
--- /dev/null
+++ b/tests/testthat/test-missing.R
@@ -0,0 +1,13 @@
+context("missing")
+
+test_that("is.na detects nulls", {
+  x <- blob(as.raw(1), NULL, as.raw(2), NULL)
+  expect_equal(is.na(x), c(FALSE, TRUE, FALSE, TRUE))
+})
+
+test_that("is.na<- sets missing values", {
+  x <- as.blob(1:4)
+  is.na(x) <- (1:4 %% 2 == 0)
+
+  expect_equal(x, blob(as.raw(1), NULL, as.raw(3), NULL))
+})

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/r-cran-blob.git



More information about the debian-med-commit mailing list