From f3f7aed80d8e28d7b487027b80f4892db5d19f35 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 15:25:20 +0100 Subject: [PATCH 01/13] Change CI to docker based setup --- .travis.yml | 36 ++++++++++++++++-------------------- Makefile | 36 ++++++++++++++++++++++++++++++++++++ docker/Dockerfile | 27 +++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 Makefile create mode 100644 docker/Dockerfile diff --git a/.travis.yml b/.travis.yml index 04e98a1..6b62ad7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,29 +1,25 @@ -# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r +os: linux +services: docker + +before_install: + - make docker-pull + - make info -language: R -sudo: false -cache: packages -os: - - linux -r: - - oldrel - - release - - devel notifications: email: on_success: change on_failure: change + addons: apt: packages: - - texlive-xetex - - texlive-latex-extra - - texlive-fonts-recommended - - texlive-pictures - - ghostscript - - qpdf -r_packages: - - covr -r_build_args: --compact-vignettes=gs+qpdf + - make + +install: + - make build + +script: + - make check + after_success: - - test "$TRAVIS_R_VERSION_STRING" = "release" && Rscript -e 'covr::codecov()' || true + - make covr diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..13139c1 --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +SUDO := $(shell groups | grep -q docker || echo sudo -E) +IMAGE := "tikzdevice/ci" +PWD := $(shell pwd) +UID := $(shell id -u):$(shell id -g) + +DOCKER_OPTS := --rm -ti -u $(UID) -v $(PWD):/mnt -w /mnt + +PKG_VERSION = $(shell grep -i ^version DESCRIPTION | cut -d : -d \ -f 2) +PKG_NAME = $(shell grep -i ^package DESCRIPTION | cut -d : -d \ -f 2) +PKG_TAR = $(PKG_NAME)_$(PKG_VERSION).tar.gz + + +docker-build: + $(SUDO) docker build -t $(IMAGE) docker + +docker-pull: + $(SUDO) docker pull $(IMAGE) + +docker-push: + $(SUDO) docker push $(IMAGE) + + +info: + $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e "sessionInfo()" + +build: + $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) R CMD build --compact-vignettes=gs+qpdf . + +check: + $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) R CMD check --no-manual $(PKG_TAR) + +test: + $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e "devtools::test()" + +covr: + $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e "covr::codecov()" diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..d74e2f9 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,27 @@ +FROM rocker/r-ver:latest + +LABEL org.label-schema.license="GPL-2.0" \ + org.label-schema.vcs-url="https://github.com/daqana/tikzDevice" \ + maintainer="Ralf Stubner " + +RUN apt-get update \ + && apt-get install --yes --no-install-recommends \ + ghostscript \ + imagemagick \ + libcurl4-openssl-dev \ + libpng-dev \ + libssl-dev \ + perl \ + qpdf \ + texinfo \ + wget \ + && wget -qO- "https://yihui.name/gh/tinytex/tools/install-unx.sh" \ + | sh -s - --admin --no-path \ + && mv ~/.TinyTeX /usr/local/tinytex \ + && /usr/local/tinytex/bin/*/tlmgr path add \ + && tlmgr install pgf preview xcolor memoir ifetex microtype float \ + babel-english listings xstring luatex85 \ + && install2.r filehash png evaluate formatR ggplot2 knitr lattice maps \ + testthat tinytex covr devtools \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf /tmp/* From 4e29397510927aa4a5fbeadac8deb90310cfc366 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 15:36:04 +0100 Subject: [PATCH 02/13] Run tests with R CMD check --- tests/testthat.R | 8 +++----- tests/testthat/helper_graphics.R | 6 ------ 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/tests/testthat.R b/tests/testthat.R index a690deb..32adb7c 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,6 +1,4 @@ -if (nchar(Sys.getenv("R_TESTS")) == 0) { - library(testthat) - library(tikzDevice) +library(testthat) +library(tikzDevice) - test_check("tikzDevice") -} +test_check("tikzDevice") diff --git a/tests/testthat/helper_graphics.R b/tests/testthat/helper_graphics.R index 4723b4b..79895f0 100644 --- a/tests/testthat/helper_graphics.R +++ b/tests/testthat/helper_graphics.R @@ -9,12 +9,6 @@ do_graphics_test <- function(short_name, description, graph_code, fuzz = 0, engine = "pdftex", graph_options = NULL, skip_if = NULL, tags = NULL, ...) { context(description) - if (Sys.getenv("R_TESTS") != "") { - # `R CMD check` is running. Skip test and return so our graphics testsuite - # does not slow down the CRAN daily checks. - return(FALSE) - } - if (!is.null(skip_if)) { if (skip_if()) { return(FALSE) From 9fe50e7a207e97c7091db588eab92421f1c596b4 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 15:43:09 +0100 Subject: [PATCH 03/13] Skip tests on Appveyour due to missing TeX system --- tests/testthat.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat.R b/tests/testthat.R index 32adb7c..6e7577e 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,4 +1,4 @@ library(testthat) library(tikzDevice) - +skip_on_appveyor() test_check("tikzDevice") From f5858b0a56353932a0cb02b467fb6b2e3d5e8c72 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 15:44:46 +0100 Subject: [PATCH 04/13] Remove depricated testthat::not() --- tests/testthat/test_metrics_dict.R | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/tests/testthat/test_metrics_dict.R b/tests/testthat/test_metrics_dict.R index 54eae51..08ad01f 100644 --- a/tests/testthat/test_metrics_dict.R +++ b/tests/testthat/test_metrics_dict.R @@ -4,8 +4,8 @@ test_that("Temporary metrics dictionary is created, but only once", { expect_equal(getOption("tikzMetricsDictionary"), NULL) rm(list = ls(envir = .tikzInternal), envir = .tikzInternal) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Creating")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Creating") + expect_silent(checkDictionaryStatus(verbose = TRUE)) expect_true(file.exists(.tikzInternal[["db_file"]])) }) @@ -13,8 +13,8 @@ test_that("Silent creation of temporary metrics dictionary", { expect_equal(getOption("tikzMetricsDictionary"), NULL) rm(list = ls(envir = .tikzInternal), envir = .tikzInternal) - expect_that(checkDictionaryStatus(verbose = FALSE), not(shows_message())) - expect_that(checkDictionaryStatus(verbose = FALSE), not(shows_message())) + expect_silent(checkDictionaryStatus(verbose = FALSE)) + expect_silent(checkDictionaryStatus(verbose = FALSE)) expect_true(file.exists(.tikzInternal[["db_file"]])) }) @@ -27,23 +27,23 @@ test_that("Switching metrics dictionary", { tryCatch( { options(tikzMetricsDictionary = tempA) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Creating")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Creating") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = tempB) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Creating")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Creating") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = tempA) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Using")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Using") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = tempB) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Using")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Using") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = tempA) - expect_that(checkDictionaryStatus(verbose = FALSE), not(shows_message())) - expect_that(checkDictionaryStatus(verbose = FALSE), not(shows_message())) + expect_silent(checkDictionaryStatus(verbose = FALSE)) + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = tempB) - expect_that(checkDictionaryStatus(verbose = FALSE), not(shows_message())) - expect_that(checkDictionaryStatus(verbose = FALSE), not(shows_message())) + expect_silent(checkDictionaryStatus(verbose = FALSE)) + expect_silent(checkDictionaryStatus(verbose = FALSE)) }, finally = { options(tikzMetricsDictionary = NULL) @@ -61,17 +61,17 @@ test_that("Turning custom metrics dictionary on and off", { tryCatch( { options(tikzMetricsDictionary = temp) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Creating")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Creating") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = NULL) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Creating")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Creating") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = temp) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Using")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Using") + expect_silent(checkDictionaryStatus(verbose = FALSE)) options(tikzMetricsDictionary = NULL) - expect_that(checkDictionaryStatus(verbose = TRUE), shows_message("Creating")) - expect_that(checkDictionaryStatus(verbose = TRUE), not(shows_message())) + expect_message(checkDictionaryStatus(verbose = TRUE), "Creating") + expect_silent(checkDictionaryStatus(verbose = FALSE)) }, finally = { options(tikzMetricsDictionary = NULL) From f7b9c7b0de287bd7d29edd9a519b4d09412099bc Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 15:45:56 +0100 Subject: [PATCH 05/13] Add quiet option to compare to supress some warnings --- tests/testthat/helper_graphics.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/testthat/helper_graphics.R b/tests/testthat/helper_graphics.R index 79895f0..ecb6da2 100644 --- a/tests/testthat/helper_graphics.R +++ b/tests/testthat/helper_graphics.R @@ -121,11 +121,10 @@ compare_graph <- function(graph_name, tags) { return(TRUE) } - # Normalize and quote some paths in case we are running on Windows compare_output <- file.path(test_work_dir, paste0(graph_name, "_diff.png")) command_line <- paste( - shQuote(compare_cmd), "-density 300", "-metric AE", + shQuote(compare_cmd), "-density 300", "-metric AE", "-quiet", shQuote(test_output), shQuote(standard_graph), shQuote(compare_output), "2>&1 | awk '{metric=$NF};END{print metric}'" ) From aa3d55e6763195e7da3ff896a11678e4422eda64 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 17:00:21 +0100 Subject: [PATCH 06/13] Revert "Run tests with R CMD check" and "Skip tests on Appveyour due to missing TeX system" This reverts commits 4e29397510927aa4a5fbeadac8deb90310cfc366 and 9fe50e7a207e97c7091db588eab92421f1c596b4. --- tests/testthat.R | 10 ++++++---- tests/testthat/helper_graphics.R | 6 ++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/testthat.R b/tests/testthat.R index 6e7577e..a690deb 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,4 +1,6 @@ -library(testthat) -library(tikzDevice) -skip_on_appveyor() -test_check("tikzDevice") +if (nchar(Sys.getenv("R_TESTS")) == 0) { + library(testthat) + library(tikzDevice) + + test_check("tikzDevice") +} diff --git a/tests/testthat/helper_graphics.R b/tests/testthat/helper_graphics.R index ecb6da2..096bfd9 100644 --- a/tests/testthat/helper_graphics.R +++ b/tests/testthat/helper_graphics.R @@ -9,6 +9,12 @@ do_graphics_test <- function(short_name, description, graph_code, fuzz = 0, engine = "pdftex", graph_options = NULL, skip_if = NULL, tags = NULL, ...) { context(description) + if (Sys.getenv("R_TESTS") != "") { + # `R CMD check` is running. Skip test and return so our graphics testsuite + # does not slow down the CRAN daily checks. + return(FALSE) + } + if (!is.null(skip_if)) { if (skip_if()) { return(FALSE) From ee1c4a33c64271528d55eeae69877421821c5e9e Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 21:45:18 +0100 Subject: [PATCH 07/13] Use testthat::test_dir() instead of devtools::test() Since devtools::test() is meant for interactive use, it does not fail if any test fails. A good alternative is provided by testthat::test_dir(). That does require the package to be installed, though. To ease the installation, /usr/local/lib/R/site-library in the docker image is made world-writeable. --- .travis.yml | 2 +- DESCRIPTION | 2 +- Makefile | 8 ++++++-- docker/Dockerfile | 5 +++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6b62ad7..c744921 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ install: - make build script: - - make check + - make check test after_success: - make covr diff --git a/DESCRIPTION b/DESCRIPTION index a73adb9..842e306 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -40,5 +40,5 @@ Suggests: SystemRequirements: pgf (>= 2.00) LazyLoad: yes VignetteBuilder: knitr -RoxygenNote: 6.1.0 +RoxygenNote: 6.1.1 Roxygen: list(markdown = TRUE) diff --git a/Makefile b/Makefile index 13139c1..ddffe42 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ IMAGE := "tikzdevice/ci" PWD := $(shell pwd) UID := $(shell id -u):$(shell id -g) -DOCKER_OPTS := --rm -ti -u $(UID) -v $(PWD):/mnt -w /mnt +DOCKER_OPTS := --rm -u $(UID) -v $(PWD):/mnt -w /mnt PKG_VERSION = $(shell grep -i ^version DESCRIPTION | cut -d : -d \ -f 2) PKG_NAME = $(shell grep -i ^package DESCRIPTION | cut -d : -d \ -f 2) @@ -30,7 +30,11 @@ check: $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) R CMD check --no-manual $(PKG_TAR) test: - $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e "devtools::test()" + $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e \ + 'install.packages("$(PKG_TAR)", repos = NULL); testthat::test_dir("tests", stop_on_failure = TRUE)' covr: $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e "covr::codecov()" + +clean: + rm -rf $(PKG_TAR) $(PKG_NAME).Rcheck/ diff --git a/docker/Dockerfile b/docker/Dockerfile index d74e2f9..c5b24e4 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -22,6 +22,7 @@ RUN apt-get update \ && tlmgr install pgf preview xcolor memoir ifetex microtype float \ babel-english listings xstring luatex85 \ && install2.r filehash png evaluate formatR ggplot2 knitr lattice maps \ - testthat tinytex covr devtools \ + testthat tinytex covr \ && rm -rf /var/lib/apt/lists/* \ - && rm -rf /tmp/* + && rm -rf /tmp/* \ + && chmod 777 /usr/local/lib/R/site-library From 4fc78a227e96309261015108513e15ec8ccb4032 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 19 Feb 2019 23:14:23 +0100 Subject: [PATCH 08/13] Update some graphs for current tool chain --- .../standard_graphs/ggplot2_superscripts.pdf | Bin 17098 -> 17088 bytes .../testthat/standard_graphs/ggplot2_test.pdf | Bin 29804 -> 29909 bytes .../luatex_utf8_characters.pdf | Bin 10727 -> 10723 bytes .../standard_graphs/utf8_characters.pdf | Bin 9413 -> 9436 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testthat/standard_graphs/ggplot2_superscripts.pdf b/tests/testthat/standard_graphs/ggplot2_superscripts.pdf index a8f4f7c0ca119505a471e8a60f81f71b02d95bde..52f34069d4732d33e5a0b709b4c054a5f21a59ec 100644 GIT binary patch delta 2205 zcmV;O2x9ljg#o~Y0gxmDGcuFQJ}7_9S<8+bHxj(hSMVqun&$g)GlX3m@X2Kl;Dfz@ zgx-;?g`{228u0Hsl2ye=6^ojJ8}dNXpeLG)%t$6PN$NLtC)l_2;~jo*9fM_mu)E*V zU&-jtBfk0SfA8LYeSIUiz`+00NWtje$K6LO3LUQCRu$$y`!PE|k!& zB`feLHq79`1*u!M0-s~^k~@EI{FW`lr`WWP+<2*d%U0l1Y(^@sRTQyhEATls6S%kd za>JJ4r?5$@xpx*y>YOcTlbxSsQ^+SN1iq}<3VM#sXv2-B?5x=e`Z>0?o|Wu%o*QG7 z*<^2qPq8V3h9YF#WJrNev1uf|Fy3r3q`>Fcyya0?B{ystehORA1lWIe5i)pg4V2P6 zYAtP>9~nKlqRw#TLYul7Jm6yVXYP0FIiR$=`CF>*#v>bqjf_5MceBadBZ_zJd~PO~%YB9|I$tYUNlX-7F&+0NK?_I&ZO8k*Hq zlzZVzy!(+l9dR8Mj}qlB*>XCqn?{We&JcMYblgkiBGVCGM1g;{Y_#V#Ae5|TT(K)n zmsE&UGZLHGhG-kcg3YGW+ydf^Vzo7_;?rp6QN_mcily1b$uhKvDU4gybEvx^Iv;2g zsiPn{M1o9|AYN#=L*ayO z9fUkY7572WCm6Q^sR;~uVx2-WsW?}R^g<<~Lr0rxsKYVPAWdq@g005W^a2a+l*I;p0PANJ6eVoJ(+PYd9WKM2+7kW0F27&;d#OPyHEWnUVJ?kmZy1K0^Hc|=2#hPJBL@YZ2BV)0o; zx%E-6Uhgo~Hxv0UD?yM}{*evH~h3wwZ`pSyuQm1c#%;mUTwe z11;U#q%UL{$Tn$aK?4^~;T%!Oa1xUNg{ZQcA)0@i-75o&uuQktI)}I)n$r=s2CW_Y zf#H^kYi~%U$U59fX#M-3L0gJiG9W^unlWo}KBY@eVOtS63zFa+f>eg#28H{Ws;Dxu zTAU{?prRv|j;v5&PiT6NC>B@bnp|BR%fqtsnQEtTj%zm{C9J%A`$<84CeKhmR&RD+ z{tbUKJFV~NYzj_X@rq|(>=&~?fDymoacVB%I zSmY7AjorW9TD$)@`}qY{>*c@hzq|YA{lKYdY$(TauS}uJs&EToh3QDwGGdWs4rCRc zX=r62N(;D6b@8vOs;G`+twR=F?m$v}^jg;Y{8L0N&Kv|(WRJIIRl!YT@g=rca zn*P>(eNgyxYM7yY$LqZAwNFSxs^$@|^R#z@s(Hcdyz8Bzs-N#Vk9r^e?!tTEe|{WP z=^UnI^I}+cl+Q(?oS|!~&MV?mqPji|)>Qi^#1GG?n|U}Fux)W3)9$a-kcH?{n09|9 zq_veQh!oobvU6w}8tD~Ax_Fy(Mjy}?>7M5DE8 zZS{B5&Yx*$qbEt@CK{c+!CI|MqqW*tJ6Nl|Pt({=R~TBT*Xjm~wK9!XYh$gyTzi+M zv6;Ru&*>@k7P@Apv988izY6YMn#N}Oy67p{+(g&RG}hHv>zBg4OVilQ^jv>VXi5Z5 z|Br|}hfFsn$z_gS{dtXKc_J$hyt$ApWS7jgFIJ7c6wMF+eJ8~)!iv}5KE8SX>E%Uh z{o)_*-+X-d{o(O7zL2|Wwsm?MI`M3RE$K8y*{`@4%bj|T@}&;-Q^UQ`T`Io)#kw__ z0{;C=6<$0%ULQWuhu{{}?(W+=ho`aq9O@~_$Im|j+U(C;v(E?MH32!3 zustOyIWRIYIWjRdHZw3 zI506XH#tN?Loh``FhoW+H#0UhGBYtkJ|H|WMnW(-LP0q=FflSWIYdH3FhxQzL`F6@ zGd49cGciJwG(u8DdO$P>5VJC}zXGw@fS8lfb_xTdV=n^$f>8wj3T19&b98cLVQmU! fZe(v_Y6^37VRCeMa%E-;F*Y|iF$yImMNdWw-Wm#I delta 2189 zcmajacRUmh1IO_s=`MSpdG^OUG;a4KNF4@XB>#UF+ zm&lQ)=lAdP$MfI!^?AMj`S!(-49Ae9^WB6=W%eryp~uWeyp|C(%S1?f08=i%T-ae^ ziO%zeI_v{x&&XSEb@O?A*<>D|d!6}?xf2XUzwtmZRzurV6QiKiSZefslj9ji3BRtY zPw|G>+;t&)X~c28v{7*MCxo~~B)ALnQCy=Q%^zP=*FS_%CSw50#KXGFRuaOU8|XJW z%D=17UAu8+J^7z(JL|i&t|l<-cI9WO^yQts=NoE;m}aJhuiPL9#UY@ebw#QMi+h># zi}1-0;D(^7*SRMnw=u%lbc+Md|>izAp|3-@?1Us0LX^ro9dki*HBUd@xy6^*|aR6Llx%fno7uLShZn!()GE z^4KlfN<isiHbd!VGOZ1 z5Bh3&oGB>vW2`egZkfW*pi1s275F8h70kllnBe zUhPFwmOsk+*j^)?<-WGL`}ZEVAkSbMdxz0HwM&SGRbv&UT^q}h zgvrak6=Mv*VXB4&q)H)WB=5>sDj=%wr;t3}k`&CdC7kTS8*N{)5Q2?e6CNFgCDpRb zbyi2er4N){W6(^`NsJvOYmAN6z)?OarEsDTl`4)ZjS?gGnakpl^DoElobg|S#a5e+JmFK|*H zS80b63MDzMV_xY%%83fnhs41s%%BFf@G5oWb{W&~+5T`@&x@eA? zuALQx%c$pN-Jr0kdSc0)mo9OiWt1sH6;SOzsE+0k$@Y^}q1G|sZt<+uN(Yj^4P$XL z4FJ_8AUWrRX9>Es;`y7pibfDbRE|sC8CO;;YjXzV1%n!o|2axN{!ZtF%HL$b#-2bo z*=p}$PKGv_7?%ipTkqKsf3!sKba5?|8=uV{V=~^mgpM=xdI19`jVk~u)3`p7Bu^{P zp_zdbpe-5yggl}gx4QN?hE6QtdDg&!1~6^T zdmet1OkhEC=7!I=e$M$oCQFL3MRf8%3?+z6z8l;FOP%qjJ!WhApb%4&JQ(cWh8>6} zQk&;@jKCd|X?-ND?QZ%jVB>)U#yi@5t5B&sBTRZ!R7tHyCVjQ`& zbsXf(X=wXEmzlg2>K|7(1;wkg|J;J*3)d}Ap=M~|t!p}qlXvfGuRTaqG zwUt2!^x8Po6H(OUR|T8?fpayP*Nbj59e6j<6jVTc=1>#L84EEW>Ik z0D$_NTODD-{%phl<|3G$imket)55eg+CsZ^Ag5vU>(R5F-W^Ey6v2mudYoWrWVp>3Maw%I5_UgIRr?aH^14JSxz&_Oguf-kJO#54^6s()@~2$U&k`rE$X>&j|RtX?^t z%BXnl_J~=05={5iCe92Uyy!x^mv<4aq+_>`RI*Ga0D&Hi%??-+D=p%tkGfoUcrYjD zIX_1PMWF{exPe7%bfd%W*%dry?XpZ_Nj<&%Pm%b4u?+uhxEjJ-C8|m70Wm z(E9c=_m_Wew!y*c+@;T_k>e?uzRo*HZPOwwG`?HfkHTU*xd+~n6`Gg$nG1azx*;ZzF*UmV3&OmTv^yz7h3~j3hHpg$p1D1@iN& I>8S(%1G8BjHUIzs diff --git a/tests/testthat/standard_graphs/ggplot2_test.pdf b/tests/testthat/standard_graphs/ggplot2_test.pdf index ff297cba929a0ff334ce972cf507db69967eba16..d644dee6abbd4620eb28cfab581928ee93df5b93 100644 GIT binary patch delta 16095 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 delta 15981 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 diff --git a/tests/testthat/standard_graphs/luatex_utf8_characters.pdf b/tests/testthat/standard_graphs/luatex_utf8_characters.pdf index a34215412163716f155dc8e0d12bb5e4b105c9e2..dd350baf99026022234020ce171c0c9a0b8b8437 100644 GIT binary patch delta 2611 zcmah~cQ_mR8ZKI`*>$AKHCkJQ1hHwX6sKynafF%`#E7EQ3{|VPG;Jtagi=y7A=c?7 zR_zsS;&2t!+M}pL>n1(t-sic0-T&X`d*9#tz3=y1vYWTdlH!DF;YMX-u!H%`j0N>` zi5p7_+noL%>p@p&L#zB3!V68F>Zud~S>A=qL2tebV=a68+U# zzY7|SJUm*~haX0S?`gdeQYP5MnAS(~&sNA0-KQ0jQ2WB|c2?-Ys^mVoDc!`42|K!K zQTo{DWoA;(*KfU#UygZ#RhA z>e&65t9jM=V)e$QvHji7?fGXw`xX0ZZ83+NN62*LhG|Z0T#x-=)4kwtFuyb4u$zxC zVzNq{{FcT!qlC4#57OPz8r=kKt`d;&z1SijGst6teA;HPu%TZvB&;36yOnl1^@QirQ9~9gI|n^q=u~MF{CvuQm5Te zGPl)j2t^)_zXN@LZ<8qDF_?0j91FjMSF$Ro%56 zF0l+MY3S7-TtjMjd$Ktd$WNJsog?~bD|zyB#-j9;GT93Qi#)PJRR{J63Ibg%6e$Sm6&Q2hHv#hBMzbwoF1vaydUz|GzNi{x z)qr_G$|PY+?{-k={W^1Hqq0;R)86G5-49bge^MH2z&XE>*piNZEF zcc=~8Caq}AVFir`*P9szoD*u{T9KNZEM~LPCq?xC(jC^6U=~W2XE{T zZwdYXB7@vsu_&=WIopWMNVdIni#5tGx+#DKZl79RC3LHGDInpp4uxc^3zRS(6ur^g zs}I7Izd}}!*s||49{@npJz_-D^%O)iV{l#s1@Yi;XUU<@|LMdhr_!V=>-cBw&J z2ht*pLXv1N&TLQVk)OxfM0CC(|X6zk`xndLRwQ7~=Demtq-57?X03zU$G`vbiC zsecKn`rQCuN;#tz;^*sIgA!l0^nU`~zlp!zUi#F{vY_EBv2t~fpQ$uL)Hw6F)y?KD zUIx%3%qR?r!>0usfcWI7qv~nXZf$j|>pwT9Tm$h~32!hDcmkkyVr|7o``PRDe<|Ty z2TAa^fB5WTp)-S~oP<2wD#fWOeQc8{ba}_c>SQxTTQ-a8nXJ6|c1>V18ABYF==hgZ zO{K1!VRh^xYlhsN8>i+20P^MOaaS?FB}{rky4aIR1jTif=QL4+5EP90EjF5{=p*jo z9Z6py@UrxSaF`Ll*p$MfLO!4%YzZR2wP!_7)M}`GsPJmu4DzaK?)tu3t?^%}3 z>Yid~65hV}I*8Rh$7aHx*p-45hrhj8cA^eBC9?KS#!m@%Dj~B(iCyb3-wM3_&uk!^ z3v#djtf}sZfi19_9WHtW3z zb~-1^hl&$2?q#uTF9udaUqg`{6zphuK&Ej8p-t}oYdLC6CGY7@TAoF9#03HWVML=& zN(e@*$GTRx#$Zx}&a33fL_2tm8Xaqyu@1{9nL(y|^EftRc5iGs)R_Bc359n)_C08_ zI?r;6LU;7a?&w&OR18Xjdyz~_6=J6uU6Om_*}u6%D!uXj4%Hh-#7}qd8|RFttrG{zlXT+ z`$y(PUn6}u8<>&Xx?X<%_?hRA=VOb~lNLu*jK#UKsD|=nl?MGjkucpGy$`yCwYj#X zCzBq1v%j)XBe=H9P(;6eGD8(sUijq{h7;o)aheO>w)c zB;8q2drtH)PF_2&S1C5!n4+~IHLid85OvNAU;1< z>LirO59OhI&H( zWxiSmuOvImeDUqrp0%pjLF7y^f?8ft2(n;M#GXsN& zcT{e826%;dOKNCJ;znd-4Lw|4zYWvg_MM~+zy>&JX|RE}y>Ew45I@8ba5nb^lLz1R wYRAQ8{|ca?JZ?pC7Hh{6Qf(F`xk|bb+$YF<+=95@6(r9C=>21E)DssI20 delta 2615 zcmah}cR1Vo8gJ2_qSOd(uOhXT5HVsjiVAAPOiMJ}P&-D|s&Ud`l&IMnwTebnjFg~6 zI7e#Ks67(v^q^>3ZS6X=C&}%7o_qhg&+nh#^L{_i`+nZf`+46br&Xs+IWAqToIwQz z+)&X#@Vu^2(%!Fp)ZZ}C&v^jwpkDP6DK~C301Y^vUGA4!iQe9^UJsQI&}%=JZ+TBX z9W?OcQfZY|#rceH{%uR+d(7lB@3@@?u$4b5DR#3Snzgv^yoW zw#JFwblK_HHPw{B&X6&OM*|lr@qj2CjXu~q^XrBXJ>z6)X|TO00z%xb84l~ky_4Ko zE-%o<7YxVrvi`}WcWx+I>QZQFiE!F1d~G~);}<)x>9S_`V%GrqsB=_g2-TnmWLjn@ zn7&Zm;x0wd@j%4%jy5mo-#-_H7aHXCmv3|1r9nSjA>@xD_`+L0CWlNo^?+Aid%pd5 zgeRwEC-Q8K2(JC5eW`*-Q6Rb!?|w|X*zHZWi4 zi>XWmT}8pD?WKOJc^TsxiwSo7Eu9^Qp?lkof+N=iV81KB^1`76Jkvbm(|lL^_9J`J zT<>%QSV9;DD(dDY=1qwHM(DrVPHW*ur(r7gXM@8vGyZ97&*X+LT(egx1^Y=?)W>E& zwYEfULHM+*Bkq+@mmV0we4o0eb!=R@Tm2>cDOr+-FChMD-(P(FpBvqv8Jt8QdH(yC zF3`=J-eO~MyXjBWB}Xrsd+f=Z6nlEQK)9L^BaKl!#kWS(IKiOkI+x}{s^wO|2$7+X zMZ8-=m0P2EoqW>0#w;O-7zApj0+tONUdG-)m%K1d?b;TYb<`BFqtpBCwtb;)J| zmc#UkeO_9dUAG6@~C;MJ8D_l-!@WIluh0>&Ux^bm!C;pjyQ$8b|}?OnuQ%BT&){N z{%rIY#$W9dJ}hj|iwP?w^U-_Pl|Ydh?k*J7+FU-ESi`5B?F8OM>#f&q6xgE#^cuBycVKz$Koo>4BJqbsdA(Le&5{FCW|%&ge! z+annSM>nfC2|+;{(EyOma^#roo+a`9*!InoTvDwKFl1amc;fJD*;I*9`YP9|6J~cm za~nxx%zgbwU%X%oUgS1yNYz@jS6k_wE3Qyinul+^CH|@J=TjfB{%>C$dlEYqq;|%( zt7=w!;=niyTJyWndze}}yX`qjt~7topss=~tS1kde=;jz~w0Ed9`X416sbDzXvRzhEYM1FEe zhU~*IYE_@qNu<-QF3vo3su2_iGI06|ejal}XR@lCJy>lewQaVqS?&@Xs2|2n6oJ{g zuQyb?M9-ar^M@6aXQXmHY~5WsK5%xE2u>#asXSeX&oWf&G_qe2au>6cZ;HjMu72SG@CuOzjEQufsL~(fPE;sEkY{^l5oDT;wpB9tt6c@ zoc(iD%|Cr6=RdwtXp4KP&w9YFcj!F(bQ^$mX5N4=-1)HCA;!`4vB25cKFl+RItj5> zZsuioZw}3=cER#_!#75(%~q|io9GnxQ<-&qEHErXbG-S8In>=JC0;9!^mfSaz_R_yqrFEu+26_#Z$KAOQdNNcE%-qxgqAb-zj-t(t_9v6Jw-ozY7)Bq~M)q7jJ%g zJ_&?$)!c~S52KP<4aiAU_or?$a~pQvOr0vl5g%x~CM4Mq?VU{}+ps~pzFX}cQ{xh$ z4+|L0f1LVJy!jfro^3ff_L>g$;Vry`_x<{-Lx9&RKC`dox?>}|1u{bMGG8=IUU|nv z_9xQr;QVY&LFlpnjt$qZ(iwb;O~r$|g$dU6L9~h)?`uS=72++4Xxb5-&ds_N_3yiq zcC(0q`}ZhJP%O1PZ@VFK*d4v1p5hJ~Dj9nB=lc-m1Vqe6{U3{r;g!ngZltr$bNfn(0;U*4ze2EO1@VUbl Uuajyy6cykpT|NZ`xScuQ-+d$u&Hw-a diff --git a/tests/testthat/standard_graphs/utf8_characters.pdf b/tests/testthat/standard_graphs/utf8_characters.pdf index ba0e00e1f21b4815cdadd7cf1985d6f293fa6192..492528ece2bf8643d33120b9abb6a81f3babe859 100644 GIT binary patch delta 8830 zcmai3MNpg#!vl&Gch}9sQ(U@87nj1~F8_P{ZvQQZ zoHCP1GWn^zuACwW@bO4WqIr3H+E}=t`TjXIhPbW^;sn9;&QY?U#=`WWMa&4T@R$3` z($rz%wRhXa_Hm|Ek5812CJuYdZEfLy3TbEkZIZh_iss{Df818PmylNKmSHBz;r=HX zHQuhVW7}GNCzQiGjWN-f6N?doGVpe_BD3_A7qWYj#(YpBhqeIhq)#@-Ze}zQoz;r~{ ziL_UkN=mL4&?y3(hweu!KR#F>5fQ{C%75XZk8pfIWK;HpYM8C3_|zfzH3}sO|%qzQ&(M*z;iuTlT>eRHZ~^W!eW9 zyoP#D;oP!{h0#~mCh;G?mC$61Z2pH;+}xwC%>|rHj%QJ*c^e`2y?Xoq?S0yY^61v6o?oRb;{8Wt+=sknas;1W{g5#L15L zJ#g~!w1O%e^a6b}xxY2U{^8yl>DAW_DU9^&|E!#wc-8l~T`S7y&j1l7*2{l7Hy9^^ z#GshvgOrr3R-XffySHn#!u4tLge&SAR&6VrnpTC0&4TxHy+y6#Pql+QmaQ4J&_%z; zDj#aj3yJw4m{ezai-~I4FRuyany8-f1G)G{25tpSu6U7gnKx&DKUaWU=f}p#LJC+w z@e%v)rCc{0Kv~W=pii5N-7=_^k2;yZ%Sy3l7IQNN3=PnQ)16`mtZfR?`MNk$(ee!9 zdrA%Y2V0vryH#o;t1|`SCP)5^`J}shQq%K8^)Qb+vaNzdO2ECjRj9qgx-#tsXUk%2Ozx zTh5~-cMK(#lA3Iy2{m(WtJRX{1|^EwS((-x zvirGCr}Hsak^E$zz2nzvS~X}A7hpDf=J$e~=?Yu39o4n$c{6;hHvcNnqvdq$*F&dGu5|Axltt`z~78KcD87kQrjoF*{OBH`kyM7pf@Qk`GOpenWlDs9tS(Ndg*9) z7Tx8rGb&>{8z<|6!Hw{fxap}sYiRf74&@>PSBaDBf5yn-#oCtX=O+B)0ZuO`x)Vy@ zsX9KT3uC~;hK_k~X=g`_(w{|LOBZyLkl_$&cGMqZ+&p*G&{9tOe zbH|SK3ziuNtjd>Lciy!id&r%?Dr)p=+t|W(h>~0x$%cd_VrsV3##;tk#w!Q9!SAeG zx%LdrTA$>!&cj2;Kv+NA49U7LL5m}oQeC$y!UfHA+-UsvZtxa_J>*nXlkS< zy;GyD!bhS{skMW-gcJtMa=ezk+)S!%pRY@u#tHWc)n-&^BvwhSDAT=aBXgOO2XY;A z@~t=)#rzPLwflD|oWRTDEn-KpC^e$B+?(Dg0*_lKoV1nOLwkV*$}C(wN8WK5uQz4A z?06c@gZw>($dWipZd*Vmfr-yeOwj?Y!kTF4wM78XOYecDOHo*WND zpxHGIugHA9%qZ!0NFwk;>0l%glsI!eYO4U-bSM%%@MhHhvr*r6D<1lB&ae%Gss#Nk z$Y4FZ>ZmaNg?#FJJ65%AepolGoaYb)qWXIfd3eX)ZQ}3djN3|w0&!$$OUG!h`_^OC zD_NAq`Gsq7UA41n)}3Er+)uk8zoc}R-zFP1J09T0%RA#m;jRjQmFic={vUl$N318g zXXTrcKy&=t{v}CNkIMnCcBgQ`vnQ@gW{}M&n7NLvJI{pTfNUsTH1`2yxLW_n)rbD= zYu%(&WB{gF-9GfH|7H9nWZ4vg`KOrRr)f{yN|Ij>hbYZXrh@6yEE}M8y(3852J+)BK7PR?!?R(;tw@&8?MEt)+26wgDp|yUex?pqRsr zB0>rKoi@gRiCpq31-dGQkzB6@)7o$GrBci5N`U<&t3i~d<>A1LQ@@JFkP_twMKau% zBf?@LI@<51bZS#Y8D=$`w8#9+B}SBV&FS7KOme#msKqFBmZi5$L=9^U1s@EqLWCW{ zcOMr1NL^og_fx&C1l{>!KT5~rY+A0)V!%G#Oa$T8i2t6 z=HaxVpE3SHcOg7uc$_xr=%-&ZBg=Jhah)(`-IKoUu+Abx;~}D3iGRv{^fb+|R2m%Z z3KFd>#X2D6Gqs$# zYmt6eH&s)|{>QH9T@dQh7VZUA6qE<{{$tCg1f<)bm+MDMeDkrJsD+CF9NjcGMa$sk zPvKgrTejt-yqARvRiC>x=7Js08?044oMZ0w&EVGbWVgydApT$l*g%voIC*_iH43#sV-@jpoXapmBMm#5mif3onr;lC z#m^jgwx1J?jl z#oFKiy6yDu8gB!m1DWbZqa|){jhC*7^9ZWBGS^h*Pw0Cy`!)h>VG}+*z37_?L4i-k zO`ygXW#f@m-p4-JwQ6v(e?vxQW0`Rhef?HQ@aUG=_3LkH`^SDEX)*Wvfhd`Hls4>{ zC-?K{mA|e|rlk6RZj;~}Bs9GdS(9_FoS@b~x26VDosC@F(87U^k?ESxy?*+A;V{dS z41NVR_ELQf$cC@@ZXDAhOXbHXJ30H=-Q;M$%y#e<(8LGjy4JiCh!=3UzUbq1;cQm+0XviMGvi2fZ0ZF3p)37(VCwDr5YqCbs zsdSUwHbI_{Z?GE&H3VWq?7j)&tx8{ap*tLXbL%UK0oH6R-xZ^VVS|1N{y!8CrxjZR zK8ss^cEaIV@p!%4E2HxIzkdFP55;)YzrM$XKmG7@bb(^YO!h$7tT=Lwi!})(!I^As zPUWV}rcHaW7U?zGL%rGvjl~x}9x7c*&*n0p^K8xh!W=STHkD567$x8arx?1T z9vQC6*Z|H5)ODj%=J<-Wl!fH3gi($EkUeZ$z_KCy9bc9hIVzkuY_1CyaAl6z&pGL;}EH?KQl+P1457 zlS>)1I7V?CTk5Uj+1zPO&1@dI2mLhUldgEez}^6cbDr7%oATATFGrv1kk5%q&O{vp z?%_i|k6*N;o-tk;ISvKMUR(Y0)mT@qRz;kFaQb(}d^VBlahqC*B@(M1`9s@acKF{; zbMoV_c}8wl%w5d9pbj8Ru30c_?2~p`6d!aVVoV;(#j&5d+fgf`<&Uo7YjJof>Z@ZH zSiVAe#lB1K+yntZgN{tmKCKm1*|NcAAUiX)d*b(CF!D{913wyp47zW4(c^$}W7;xP zG$AtY9FK>xG6h+Pza7e8m6Ua9X_*tBOC+4u;cx=?oojfX$a{bjtG%idOUR_#vFMpF z&>cNUvoFDzR{e{!YPE_5n9TsaTKuj_=d8wSg&W_tYvzI#gN|x+ zBupf5Vk7j5Mvp~GbLOtud!5#-%k(o#V{F}}muhtN3A+A-MiYx)wvmLEH{+8Nma6C{ zEsvang)9&!`5izdq5;8Ra<*e(`-dM)TR@#lO$Po#Pv10#hB=8I`E@o|No6B7l_fZ7 zg->So_ViNpBaRq9!B-hMjqGc8W{0pek&!FwcErJNZ_3u2p(ys&D5JDu{DN$Fo;cwY zLoo+RwS8{y_UcmX%lZH#@!Om5dT)P%^5&cOnV;i_U^5!Q zuA38GCj1VWM7I>9Q7KRIhI_h>jmBW{R|J9<(~xag!oaO5ow(HqSc}iwJ}Mp)N9Yh^ z-{tKcAEL&`@I8(6IqP3)yVajIrUyqLyVwp!qaMgPT*Qg-8=?u6=<)JBZB;k_f^Y-- z-BFM8CP@K#N$wPTDTW$+8=IOIlHK{>2>0ac+XtoDFNuAIM$_VJ42eLK%#U~Wn$4?D zv*96DUlQyK5T-0_0x{Mk$=c`bW8QC{6KIqm_d#Wo{Ftw?<3e5yHIy{=?m+%|-6sMS z<||s<#j%FIJuX=P6e~s@@U51Vp|SstW7_J`b4Y+|st{8OcHARS(feGkuEg`3$sywU zZL%N4nbTH`)5cF1QfG>hV9A~|5r4}a`=mdd26Dwsm5?xSI_$yh`O*0XYU#RtMDDSN zLGK9mgBL>iGf$9G>`vuSKNzOF8l(32(CHWpXd;a!z}QZ8}BZUgiEaVtvEQ*eVa z=m7BQR=|0Dy6D%61EQ|%`QdIE)6y-!%JYR<42F*93yN|u(&4I6E+0r4#H5>JCf5Gt zwhTz4r3*tPG@TP8aJZmom0SL;tR&LP-VsXJ1D-zX`1o%Z2IlG=m(o5Yx^%3LzpA+< z9};Zt5x52?3e2di3)Px|zW85TtKL9?Ss> zYk9ePZt`&9H}#6}GG4MSHP-RXVfsyE?jE!M9TKN_9X3~NU% zU3Df_30+Fki6RAi46;bUqRjJm{D`7a9%{RN)vGS#ry+F2dwR5ZjvXAG`Y_|esio9e z&KJ(s$bH#{MtzHr9@r`0-+)}`1Q4+Q%$zPd3TIQx$|Ca<>#mUebg-5L1eX-L^QsHU z`Kor>l?|!)7Qw1<+NMX;X<2-Z2W9*ZDYRH7VTcHs6$wCud?ef&-jwy`B0nMX9> zs0N^{AqOye;0xSVI5;g{Y9fe-ToKFQj5T(WE~_v;I};2B!K~A&{*t zNY842ZEa^~f&wwe>rp-kl95EUn}nOh7rX#oX>>#P<{1FX{wxi4aZdMMo`PP6kdCFw zw5!M2LQR?ltRSm1#UhFy$cK_5E(#Rz=V^tVS3E}~YI46%#3`(_p{dvRjxAEF*}T|1 z6Vra+OmQI(jPw!2J<~x1?8G(x&D)Yd>tCCvZ`Fb?$?OIn7y}*f1==Hg5}w#<~pBEF)cm=U!PPp7ck|7AQ%l! zp5NzeE<4MngTqF3_%)<{;P&~KD4$@W+a5E-DfMv2Cjx8p*Z5uc#c&lj|fbI>p4KBv3(J>t;!pX5i2 zFG~)|Q=w|4I?$yuYJHmw4;u1WYtYwfZZ=macgf!hJv>hN1VBh#Mf!Y_j7^t?r~jH8 z?R9u0^M%X9u;tq;55fm$AFp--zGix6OTNoaiW_}c7$XHhiP#>H%7!bO7p!VE81c%H zTEG5t6SK&I((9b=q8`GC$v6YR_~HWW!fntRq7}vLA+?{;2xizAShEq-%D1| zadSTs%L8z(6{Q-9sk&B#vz%XK|3{>iSSy7?=YOW_;2a{zl`%a_R7xCw16>=m_%L^= z`XnyZwctr;_`YgcpI`(9W#<_$N6AS?v@NT^CwLmOK`d+hnBE1i1doB9fx#WFa%uZH zmQV|O##qV=k}(^bMQMkZmfqfCsNvbnX)v6*~+q^J}LnckeBmHM2d^Ie6kS@|fPS>`0Ox3VJo;U6#*eDE=(1(B%1c zlOF3G;D%;ef6VyhY>)XVMvqX?9#OH7d&1F3bRIQVNCWx3Kl!+bGK&s{o0?`tioDF& z7&_p9%1JTrbC#75VJm70GtKl*PGRhFkux=HD5QDXcBpz(NvSf^k1QPQ+R})4CCCqd zt|unSX5uD8>T;d7A9pOPe|xh?P&{ie;VrZX-wh&nak5RXzj?z@OF+Kr|6$AEO9wCV zO8EGyH?m{6d9Jy}Y2PviZfPlLwwzBz_Xc=CqMS!ZYX+%n?YL_i8azDq0)`u--Ykp~ ztZcONg1o$9yb{RWG{jJL&)C@5go&iq>DZ}>PwLT>>Nqpyqt*&Gc95^$&gI-ZZIX>{ zEK=Z%?%8&*sw}zkqC#wUj_rJMNDbGDWTJfXgE1|iZXK${thT{7=87+MGtjTB0>Ckj zM*#d0y75z9BWP}rvs|rSs&eb+g`f4OV#R{|0Z3cNZLHctrPep+6vKgw=y8*xS6r2~ z5>oen-yJu|#K!av!8W7E)0{F#4311@AI|$Vu_l%%j1@QG6%82jh`ZX{QTc{J!wA%8 zLJQ^Bd@d6QV%w3bEdK2*5m<&fM8Ink!lH+}r1I(W&E@#j0dIbGGxKFvPsCTPt>qW> z8(XAM2A3U7JFzfr``KkFyw$9s0RDBF%3*ze;%UX`;m^Y7E&FbNQTQ}+rJ?U7cQO~e-?_c@ptHD@bG~14Wdkq+F#Qv{ zOA6(1ICC%_^<+xS@1mt-;wbyWZxLrgPu4)8C%t-n$`df7YkE1GAL<kM6-%!!I>XAtBb5>q>U%Q-|FB3(4P-ZMbJn?_-kBs9x~aL1L=r^T{m)vaoxwo)wZ z<~git#{+!rkW z1oKKV6y_#zjf7v}n_@hVa6f&O4UY1`H~EXGGWNMBUhPZhJtENqSVI22abFsSHbbpB zoqPrYej%f~PCIo5pZ3J|<%_h=4556=%<-xJ842m&cQBvj0s(MwF@eYc*)$7LP;OMS z*7nC%Fm#SWHNL$1D-LmT;MYR5lLfS9+_3(XxaE~^(M5bkhb=a@MLNPT&Zuhoy`J-X zueq56ZgCJQr7h9&cBI}0xc3b@f&0u28En^7x%^`8%NA->Snh&RzfEPG`tWyr(H&Yc z31@W%LF(HcI3OTa{Ww@MFuYgyO=0g~suzDU484=QGRCwljXiISQ(sEuc!XWQ^W+>E zOY*N)tk!}i{nh7?YfMkik(LhSf1EC1RG5)l3YwQQD`lR^CNa z@)G2(gv{l+NS4&B9+7Q#QOP13-@~vjZ{ORIq2C_mof&<|K+{ch-%I7@2ql?=8 z7a0phS?ZSx*L6mz*rd|*#u*f)k7vd@N{OD{>yT|SRxdl+ zIS1-eCzOZ15~B?xY@VuPMT@nzSaCli?-hSesgr6EC-qziADxFSOGfPtVpBu%osp;6 zsD#$>0op9;J$V@F7?ybzRgxrlFqlFo;(>UKEqzVLbYa+-#8E&HIbSr8k&dY%Mr<8i}FLX%xMh@?hBDeSuD+z*}AEce@%(CaxL!&_B~J7+i^qqyU(1{Mp)i5 z`RZt6Y(#H}B6x;dU62XP`B~~ZYKe$bl)R!Ydpk^hqj8;1h6dDElQ3S-WJ2kRb#f#y z@PO-Ay)M?}uEaUk^l*H<&82H{A>Iu=-e+4glkTYD>st*1JrJU`4AE?#9@3p)iP$z( zcsV(dk3=7w7VfpKdliHbjfQyYjDL5sNw(#OG;|$B9 zWWCo$Cd^smqb&V(mvhz7b{>nv+7#LVj%W&1e64MIy(`2}v-h(uJ(D=)>SomdI_zGM z{H2TUqCYo#DVSiovrOL6v$c_~tXXP}3Yr|QmL^eB8u6@&#Ga@X2hZX`8@cFV!Pp9Z zwe>iqI`L2)PoYZuKXH=wSnIcFTI=??$O0tL&@Hjf8OCiZg^$D+8pg*KSh8t<8l=O6 zVI;PxB`Z^fJe*apBr2f6zb;TfblL9(`HQH#{d*ClRk@yY6qVmuO?0aA=;T>*g8PJK zWPU@-ErY`l8>jhjVv<9cs7Wt@j;S8q^s7W*)0RmGQfqY&Bfiqr6f`QZrx)T2e|k&1UN zah+o+#-n7)Wd|64IrTq5Hv=zQDAD?jvHXjk5Dg!^UD@Y#Op$dyFWD5;?k2$RYTNh| zq7*0}VsPQv-4>|Tn1f{m2{MN?|#2#+sDQ`fp_=9-tS0R2_&}718*<;9l z*K~|f+fCYIdR)HpU(=`~XVj@#DrjovT|8`e>NxT4&Nv;{-FPE@l(4i(&!s*Bk|BZ^ zuYG1XUlJHu~-# z9US6(7}Q$>aY?tu>P0cv(WCMM*rM{>CB83kxfHk*bX-q*Dp0S_E!;?QtiR9@h3hk2 zJ-Br?uoULC`^tJA_d2n4dvn?B3sMu&K~1uTFyT0xGX?@BNd)U_uwC{=@$N#!^U0!3 z5}}uI<@$S0)q563IjWcR#NBKvfM8 z)Q5elbs}2y|6it4W)YFm!a`OBKm1Y+=grhm}GcpFdcpv14ko4GKg1vD*8WCRGZv8o4q+?p!(TVbiW=3OM`l z_I&qA%#>?blq7_6e&%NR=I-b5!tHd$?>ztSx)`?PdK6zB$PXb}2OGgA5-ULg1U3hd zg) z59wF+x=227AQFA#Eljl7Px0uf@OI^D+raWYs1#OHJ99xzc1S2#%BIc}A&S8&fB}wv zgjLJ84_gE#ZByfj6ey?X)5*$O*zj2X*VL^ngsgeEx%q8*EG>kEMTGb*ctwOQctm(4 z#s5D>It@LSs^I@#VGI*Zm?7Lah=UU0P!CyDnz=;s5?*yXV+S6m&Ba3^=9RaYaR2}S delta 8813 zcmaiaMN}LN&}6V6!QEYgOK=DfEV#Q5?vTNCaJLB#!Gh}`gS)%CySqF2zumWo|F*ZT ze)X!4ZM7!bFPp#%;^Y$%L2+>fS^ykSJXg*QRvq_vQT;Bpj}WDq)e6|eRB^vRznrZ? zVP2}2!kde}wn(vKyuYhu&!v{m#wco1CRV&wu0=pxCEn)&~w&I zRwI7R>i6GOwXcmv$JbZC&hpf~i8a2n<+MHDf4toT2z(PjVIXKq-s}5ad?Tq0F&)!| z72nG)mdk4xq5mHzrUa|QhV^FQRV{TFsC$yA01$_(C`iDA@YTW_;?+sQAGe(Da-rQ}}~2G8Joo3>*lt~>lsIWR;J zZ+R!9h;UBtq8R6SeeYZGwxKh#uo3mP?l#PL-~%B@t>yo!^Ze5YgP;AF(I*&`cuU-W z;y-6^cVjfV#V983GW;j?AtXRKBX3JZ^N;qrt z5U4WRl0A;>HaY;Ui5p1L(>e8dnjky{WzcEI=`DmO3RG6<&2UBX70)Bg<%wL5MY=In z#JV9Z%w?GULOPPDD3{HNDRp~DkR25aPQQK@Ur+$z-IIc;y=6Kq5vB0E(FaeI&m zW7+6lmN)NZ{O~hev{tGz(==WjtW#{(s*x5E>K|AR10{;O{(%ZF2C+^0yN zXvcaQJiMnj{33af%^jRnU-2lED8DGUuuZBkQr{4cm&dc$A{Y|J;+xgGkZ3!&%!3K$V4nMnroX_8Ur*_Fc{DWf}`TP=86eE>jzd z-+>n-`SeKHY27?r_Cf5m7%FfIqu?=IMk4K0PZT?~DDxt*VeAT7qTlH|wDQ&TbTXDG ziFY~>7Mc7EhG8odDrLLum@hQnk7M#ShLP-wP)5*n^7R;KD$-HD@|nb*{E4ZyEX!&0 zOvv_vqMYY!tVzS-)_hzR5?E-kr7zy{6t#o(h=`;-9ca#R-%*7&pX@W{p%!gdsLc@rCaKT=cfgC_YJ$7?aThx1l_Q#Hi>Qs0x-OZ z5Cj3l7SkUTX7N^umk6{V5c{gB4olr-|5d(qrQYZGX@uRJo@J9-(5hg`t0Qr+fA#tu zsXd2q)ngIr#rYf1Pv2FQkl)8=?aO0j&ItrS_?hC8ex+<=f!06guvEu)A@z`d`C)Co zU67nWjukZN7L({x)>v=?c^Exy&8e!bI(9rcr)hn1Vv7eft-71CNrXnv4i`rs6`U~( zp-b5qPOqQs@GoL!&rOekibK!K{_V6T*etgEdG$pzt~}Vj9sJmH6SISye|AufGKH+K z*bTO=bY&b?d14GAgG5C!jwFV3pUk;3i&34tpv3Rn z0Dha`z315#(YqVhPV#??c#mGa$ry(R@_n1ZAKu>Uw2D@ukdZtJqq?_$qVTO!Z;20x zsvz$F-Q>pgJPdFTTe4v+5%D6q;=p8Cx;Xl{cr_ll@@IHow2}};XHtv|UoQMx<-r@; zDGeoGrLag+2uTJ?IBkI{I5Ck_(`lZa+rDeBt#!EriMy&!j(30F&2%iomM^_J9{n~B z{d7s|s=J&?8?!oXixOvlgQ#u^SneNO?}-7TuBCG{Vh2oohJX4W4_-epr&w`j_j(P) zq^8~au}*zrzO`kJZa6*?a}vMzki6^W5I*_7ZM{(EV@FVq5#r$v)_PZ9sHl7~Dc(6CfR@- zjSGhB1RunwCqHh5THjGEQQ3q>-&V;d#?+C5Dt|RT*?`nc4Yun|>f|wZqXq-6(bZ97 zF3_oEX=;uJmurb6Xon$LuHotRRe?}sO|;7_t#Qq)snt1t(^+>=(Z5#_#OJ#3H*_?7 zB4?M|WxF=L_bvFH?qUNNnK`%VRzBvmVdS%)M59#vQ4ZrekgAok`MQ(OE?Rs1}U0c58rDrX3)cvyD9WP2# zcyXah^Rc$YgA^%NYeB^MKmHo|It7CKD?@Huk zfA+MjGWcA1M|>b<`q3ZaVM0J*!=KQ_N_h&&JmrvJDoKaGFb}fg(JYQ zCrNsp&W*3?U0-P9%7xy4hcohlUVYUd=Q&*LmUS%z{Z-N%{Y(&6I9}e+)^a&?Eq(15 zKKlU2pg@BE*U-2%MRBu6*%7JUV28(hnex}BvB(D+Hb%xrbQTOKFSVso7aA(H-a);P z%y2f0m(#A}v%eCWtYi-$QB-y@5b%f2HWw)~v8|O_ZTlof&TM&4hMEG1x{&&%MJSQN z(X_`v&*#p<4x~d6sxM+d9Vqr$1Yo+@K_8iDj6%x01b22xEL}$1g>;Uq9!*TQmk4gy zrtD7cf&>@_mX^cPxXFrecYQ-_&FCoSU7Fhnp1tte%wK_zAhD4Vc#9abYK7?G^x=a! zh}_GCwKPZ?H7CQIKA&1hZNL1vnJZJ~BP9ogdsBX%9wNXK8ztIwnUl5t*g{;2CdtcN z44BU&Kck*>yZ#vSom8&dZA$RI(#(Fc?C>Jgh%5Kfl*+ zj-@aOj5&)%r)jGxz)(Tnd~)ju_r0^*IuVpvwww6m53QC4vDb@!llwU&lMfPP&|r&G zE8p>`hD#t$m-r4&D3VjaCAfrpuBa9^kbSaWu>KypPd0(5U(3(mgqF%qpMvN)nK7us zxAXqPh{H-@t#lHL0P*k%5kbtJ5!mu;o9Snk&T!^j!76nx|F4Z|dzMC+`!b(oTZqSw(Ia5~@ z+(+giz>LL}q=mqv-~aqx2fLj_F_Wk^3ngk04`95@lTLHFtnOgMWCNksmNvog8FyIb zzTx_+eDjm*h%um!SGSihkvHAetHsywIx{O@(>kmG3{2_?4c1XYo46sl{51ZLf@qD6 zdotb#E_={SxI?8XwF!-hN2u!>lX3G81;%P*)|=bd@Uqie-4WFqfttShY)0YCd!BH5 z^88Z5u?d?~?^H#fcu;nQL(p!b?g+|jNRHTH=w4_DGwv^BmRfNM7l~XlD7~7xdy!Ry z@z%XPCDgC6Z33$g9W5|x3UiK;6;+Nn&m8@lI(si+?y(I+yxh$>gdRH_6F}NW z8P2hTfL%_pBQw)F3B9F=$rGd?Z)hTskVyMo6wn%F}BSms=wrvY_=%*+X_$+Z^)}KBGY4 zLC}?9%NmzX5Aw-HhloO|AvTDWo0uhtUs!RjBv3gm!R!L%y;nT9(}>VO=h-i7qv%3< z+-B*S8`Y@*f5RpVu64?WbLGj}OmW#x3{)B zw7jX;D0<|86UVCJ^@+kGzegoUbC^`9*#`F~o%}+AHR?&N$xy+oe`<$_wqHR+rt^WN zf&g5ko^|%*cwhrJ0_|4?c*FvpWGya?-S_VaB;Gh z?_w%tF`#)yu^6?t%cPy0ZDHd3@b8g*AthNtX#rEY0g_6sG(1e-$(4v!PDOPia7@r* zE4Eaq1%80ZCqj@QWI}kQHKb691$G%30VqpjAYNHAU0L)^ z*#n6qmG-3_nC&`Js32V0D`P8>ix=}fa)mYjNimMfh~tAY~tMC zXvPiktJPos6S;>)Bt2}vr_#H7{sc&Ru_0q@}$ z7hEAf_iF)kUNy~QAHMIUW^1BDjp;Vy{{*JrBU0apBr7jq1{U(9-{#CVir3oQzQ*Lv zg2dzsVEd#>b?*Q%=E6Pcq1N-{o~Y#E%#VLUJ?p*`t8__O2XaLZ!?cK_OM{y!rN9X$ zw(45SG)(K-WMn9qa%kv*IHXz!5YT#g`EAQ5V{7CUbnqsVDEJe`0?I_C)Q^6f(b}7(%X#yO6m9UM zvVrQpZN-eeQI_bCi1A_k3ll5b5bHmC+j-nMKmHySzPV$kUJ$a`;QMI2h?Mwf3|B-U zN^OSm`=0y#IRn4F|IDsZIqu0(kO^jY!~54Lq|ZNoJX2=wf-o%(gJID%yRcl-LB`9=uo=x=6(!QO&a%dct)Xzs2s>Ql_#UQw{r0RvIzfI&YU}5zxdf zhjj&RZ`8xgQ=Q9~lQ@>}N1V8w&Ce3pdW+x7oy85qDCjnM&j94b$osMR-i*%xhmKf%^I9xe-TqW_vQ{dbWoc`kZ9CH zbFu~I%v#(u6)JWF4Qg_$iMHW&c>j&O8YX#J09n!NnOPg2PH6iSd!$FW0G658Rep=j zgMpqp)lX;ZG#G$AiQ9$b>hv&qEV!S!rS_T2-*RPUCvQ1tM1I=Q2PIN|LG12d>&hMy z_5_E2ImLmx4u7)jQWpoQ=Sc_v1B8a%(J7)P4AIkm#RygNyWN@3R?7gk!cVVfR;%wC zY;f@vDG(Y{gw59{A;KNj|56csLX(#uI_hm)AgM5in9D%2`R-)@hFQZpzYFsA+6q8f zcXz{x$1J(k=SUI40DINP@ZjA0LxzW>Bw(s2Txxve;LG$7ksBxu&3(N9atrXoD4RGV zSUgrrS*$@Ev8!WFJ3aiFTSYc+1c2A>!Xq?Co$94+A5WBa#^ZkIA}OIl>lrDU)ozqv zmgK7*4-2*u#WMD2;kJ$n9u>oP%VBAabW9M}zTuP~w@Uzv9!K06AtI%anMrO7LE6zOf3cNI3l)OyD?kAP< zelHxRBGNxKfPsf$Djb&8$v!%I+B!W|)4y!0y~&#bzM$J4Dfw9G^4ZAgzHHF;Y{fPR z&Wzcy?VaVYr0&X5IiFoXHr;6WTFShT?Hym=9+$CE0ak6m0ei|}+q{2|HH$GeN(Q6Q z6#JAJ=lEd*yUk#pHFs@P^JJ;I=^cFAF5K!=j+Zk0G%f@ zjKBrY%ZGN~uHeR%-13A|{ZLU|E%mqjnS?K{oFF$rHX9q=bS&M5ZCx-}Rn?kDZ++C2 zk%^V-n{W>=H8nFeD@qF`!8QvpGAb%!EUJ1uZfHzF{=YQ@bD~JfLfX<|xxvG}h=a3U zq}qc~v?Hlysij6!oJ4j`Hc~L%awfi8kD|(fDKh&?KvEj2hclMTSj(mA9;lZ!ey(Oa z2kPEw@SQ=dIJfFqkVO!?8FMaU@OTTao{KOAtpR#Zpg|Os!R}|;`qM?`VzxiZ9!4X7BM2_AR}}s1 z7DeYX_YrX$ztp9ZZ>7WO@bzsKSjTX5>DmA|79XnVoRne z`#e=DUwF>y?21a}jdd)D$hpf(akC4YdZrM67G3bHt z3EoX=9g)U>gXj(tB;8#V?;nIKI?x-N)t0q?KUhHa1`S!lK)3}W*|CjTx0a9u}qiwM{jC;yJAU>{##>+w*kKJ zD=>I7aN$WTz`NJ{93om&^@iYl4w~}cI37QorAHU^ZPmIu&y8%k!I!C)sPjBgGg{EIbnMj30x|P|<4f7rC+uk}VTTar?A)wmXHurGob@^&SIDH7>2;2}JtUtVCh3 z)jdH9p& z8Vaw0BqPVR4Xn1s>kk15I##w#42^vQfBxeNr3IJ4VdoE)Eb^?f2vDr%0ON9lKP-z} zkQ-(GOber0{;c8_wlVzSw3d865j8*DOFGbBev91iRO6kT3YzIveBdyyq5sp_L;pQ% z_wa20XP|B!B90isPU4b%=QCm$*JST|KI9C&#U+~56c+(2=Uv8g{?GCQtAv9O{>Psw zB7&JCRehA2{fJAcC6I)#+~X}c^X&eGok`T{BF6wfX>wgM^o}Xnd>P)oJ4{!N!LqyO zHw}rvQ-U&;lCt9Ov2Si>@As+qZ!+)el$q_Rd>3?fJ^;jTi-`bQ8HG z(1Fj{$2W#@*(6@5Gx8@CDn6bOrVyH@gx`u@bz_ys;_y zt?>2Z?Ytj%jK3-$G-Szq+TN@k>C_!ikwgAGt~B2HEcY? zOZ1AfI*z^kI5JRPjK89O@mv%YAaz`vc<8>;Pm1RH(eN>LV?LybkuB4y{|KLg_}$yo zr3{(7(i8a9feEU4lVR|V2c?M0ySdzx)w8>J6b-Tc8n=}{@Knclhs*Bvh} zhps&zB)u9(MGv96ajS3%i5VafNISwJoiZSWpy6XTjQa$pMY$O0aS}!4_|9J8Mbr8! zy;dg`a)jFOkEp_15+`K%^P$NiKqNlVkXnbt4&=o0?}0KXJ*_ABZutGI4$Qb^Fcb6t zaw!&Zg6H=Mf=#8bGT)O*I)|N7hyrR8m}3$1{C65)XXMEk2D~`v>K33}Jt((}?$mLc-(4E8)337hgE53C{xf~7-`8dwLkW&(%#W`U z-AfzJ9xko?&LYC)^vF`YPkxF3<;PFT|BAbzWAailwszwn)~%XW_}2i$-`|y_{ZnwT ztO5SZo0%UcM68)9B#&cEm5kzVoYl_!FG?i^0I2oMEb+%@JKQYBWoTMH3rBy*JQY_; z&p1cA%ZrhKmCDIC4`e<;)0eFnu@r28PKhz}@A`KJENw);zMTd#bg`Q&ZlD^Mvf!NZBgwHMmFPlDG{2k9V;FfC5N&Tjm4!3G=gL3%g)%cZEHI9UU2?EBCZr0{ks zuS=h=BNlE5l=XV35OC{{tSPNKahI)!#k8Hzv)o73SmaOb!Kc>LB3e)ntZ!y&an6{( z=ll_fpL_;6qDkv5AMR?9?+10ua6VrmErM#|PWb|70wscnhr7sEvIKR!t76Ci)Ot(R zcMH>y=b0h(hHMP-4OV>|ijF=pQDY5>SI?H*edju3`DUO~Ubb&yAs z4b`*l}x8g$QlDQEiB6_uP5sM)xv;v{xe^FRqo z;gL(+xr*2X#Mq}gG^KZG=xgxujBA-c{TtM`Gkbq{+y#g+=ZwcnwTv+5MwPa}CMExw z&iV6Kp?oLz8*-g2)8zrDq^PyL9=qEe|oHUgbqaa&n$@YK7v$v8(KGq?X}70>OJz{lq$o zW02D-KkA2nr}$=yiHubHs05ZlBDcQt>Uzpu6+)Y@v%~zigr%@b+~H2q5v5(!B^ZJ( zs{1P}DOFk;SV^!9jx1q(1f@dW0FqUda}OGON)`;gr&QItmDdV`0~uxXLn?KHkF@X9Bn3+)rzOh}jO3durMCA#8?9=2Pc z@E_Z7qnoS6rkU{32dq@`R0sRso3ndy$7z2g^Ov9C`kEvDyXes@{hoSd^V((xM88rUVKS>(@WER%Lc zX8o*ktMZPf`8`=v^!>Tz)>HKnG$71A=eQTVO@m(*?MI}p|DC1^*MP`1obID|eJi!( z>fTf1c#c(9G6T}16FDY+XF(DbNgF76W_dNhX-LAGTxU;m(-F2L0o*}tJeHr#1nk0d zDixwrOIuGNnQO1(Y5;hjwX%vB}IqeQkE@7Xew1N$KpO>o@I184@Fmo>My zAvFlKU6L={YP0>?7HgsVlWPjJs?OiPC1`tXycUtW#I~}TaA}o?BZW6YYnhPW_6n5ImgS1$i+DRL zIdY>IMQ`rW%WJVUqDZ^lENE*us0aq_B}D4CBS#S^BCgu{RJm#hboZxq@vUa)4dbu* zTysXKf2ItKc@GU`9$xi9^YRQHz7KdK`FR2>chvBAqh$W(?1bC8s#axdXk$)Lj{ofK z_=m#7MQ0rW;i&1M^GDVpY0>Pq&Qxd9-G1c9;i|%hn#i-{%^ z<8Y=tS^4TuA@K*Urx+l3rwRaGy{@K69d2IGX=I_sD;dld0{0UJ?M% W)e~r8i6X%HjT?oIPD)uC<$nM=Dr3C> From 7ff8c26eb49f3f35929c5d2a0ea1bad16057b902 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Wed, 20 Feb 2019 12:03:44 +0100 Subject: [PATCH 09/13] Define HOME inside the docker container --- .Rbuildignore | 1 + .gitignore | 1 + Makefile | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.Rbuildignore b/.Rbuildignore index 144e1b7..72bc654 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -26,3 +26,4 @@ cmake-build-debug$ ^codecov\.yml$ ^_pkgdown\.yml$ ^docs$ +^docker$ diff --git a/.gitignore b/.gitignore index 596c1d5..f6e5a0b 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ /CMakeLists.txt /clion-test.R /cmake-build-debug/ +*~ diff --git a/Makefile b/Makefile index ddffe42..d5db136 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ IMAGE := "tikzdevice/ci" PWD := $(shell pwd) UID := $(shell id -u):$(shell id -g) -DOCKER_OPTS := --rm -u $(UID) -v $(PWD):/mnt -w /mnt +DOCKER_OPTS := --rm -u $(UID) -e HOME=/tmp -v $(PWD):/mnt -w /mnt PKG_VERSION = $(shell grep -i ^version DESCRIPTION | cut -d : -d \ -f 2) PKG_NAME = $(shell grep -i ^package DESCRIPTION | cut -d : -d \ -f 2) From ebd0f4c7617aac394a8fb679ec5730eb74fcdfb7 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Wed, 20 Feb 2019 19:16:30 +0100 Subject: [PATCH 10/13] Make CODECOV_TOKEN available inside the docker container --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d5db136..bbf4232 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ test: 'install.packages("$(PKG_TAR)", repos = NULL); testthat::test_dir("tests", stop_on_failure = TRUE)' covr: - $(SUDO) docker run $(DOCKER_OPTS) $(IMAGE) Rscript -e "covr::codecov()" + $(SUDO) docker run $(DOCKER_OPTS) -e CODECOV_TOKEN $(IMAGE) Rscript -e "covr::codecov()" clean: rm -rf $(PKG_TAR) $(PKG_NAME).Rcheck/ From 13f66e81f6961339ae62584fa9ceae1ac6314e06 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 22 Feb 2019 12:29:48 +0100 Subject: [PATCH 11/13] Add git needed for covr --- docker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index c5b24e4..043e70e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -7,6 +7,7 @@ LABEL org.label-schema.license="GPL-2.0" \ RUN apt-get update \ && apt-get install --yes --no-install-recommends \ ghostscript \ + git \ imagemagick \ libcurl4-openssl-dev \ libpng-dev \ From 0220e85b6fcaf41eb6e47d8cd2c3ea6f1fa31e39 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 1 Mar 2019 17:50:18 +0100 Subject: [PATCH 12/13] Add additional debugging info. --- src/tikzDevice.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/tikzDevice.c b/src/tikzDevice.c index 42b40f4..f27fe30 100644 --- a/src/tikzDevice.c +++ b/src/tikzDevice.c @@ -1368,14 +1368,22 @@ static void TikZ_Polyline( int n, double *x, double *y, /* End options, print first set of coordinates. */ printOutput(tikzInfo, "] (%6.2f,%6.2f) --\n", - x[0],y[0]); + x[0],y[0]); + + /*Show only for debugging*/ + if(tikzInfo->debug == TRUE) + printOutput(tikzInfo, "%% First point x = %f, y = %f\n", x[0],y[0]); /* Print coordinates for the middle segments of the line. */ int i; for ( i = 1; i < n-1; i++ ){ printOutput(tikzInfo, "\t(%6.2f,%6.2f) --\n", - x[i],y[i]); + x[i],y[i]); + + /*Show only for debugging*/ + if(tikzInfo->debug == TRUE) + printOutput(tikzInfo, "%% Next point x = %f, y = %f\n", x[i],y[i]); } @@ -1383,6 +1391,10 @@ static void TikZ_Polyline( int n, double *x, double *y, printOutput(tikzInfo, "\t(%6.2f,%6.2f);\n", x[n-1],y[n-1]); + /*Show only for debugging*/ + if(tikzInfo->debug == TRUE) + printOutput(tikzInfo, "%% Final point x = %f, y = %f\n", x[n-1],y[n-1]); + /*Show only for debugging*/ if(tikzInfo->debug == TRUE) printOutput(tikzInfo, @@ -1415,6 +1427,10 @@ static void TikZ_Polygon( int n, double *x, double *y, printOutput(tikzInfo, "] (%6.2f,%6.2f) --\n", x[0],y[0]); + /*Show only for debugging*/ + if(tikzInfo->debug == TRUE) + printOutput(tikzInfo, "%% First point x = %f, y = %f\n", x[0],y[0]); + /* Print coordinates for the middle segments of the line. */ int i; for ( i = 1; i < n; i++ ){ @@ -1422,6 +1438,10 @@ static void TikZ_Polygon( int n, double *x, double *y, printOutput(tikzInfo, "\t(%6.2f,%6.2f) --\n", x[i],y[i]); + /*Show only for debugging*/ + if(tikzInfo->debug == TRUE) + printOutput(tikzInfo, "%% Next point x = %f, y = %f\n", x[i],y[i]); + } /* End path by cycling to first set of coordinates. */ @@ -1430,7 +1450,7 @@ static void TikZ_Polygon( int n, double *x, double *y, /*Show only for debugging*/ if(tikzInfo->debug == TRUE) printOutput(tikzInfo, - "%% End Polyline\n"); + "%% End Polygon\n"); } From e40b3181f6718cfb58ea4cd8fe327de7e2403cd7 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 6 Aug 2019 13:10:51 +0200 Subject: [PATCH 13/13] Add 'all' target --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index bbf4232..0936eb0 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ PKG_VERSION = $(shell grep -i ^version DESCRIPTION | cut -d : -d \ -f 2) PKG_NAME = $(shell grep -i ^package DESCRIPTION | cut -d : -d \ -f 2) PKG_TAR = $(PKG_NAME)_$(PKG_VERSION).tar.gz +all: build check test clean docker-build: $(SUDO) docker build -t $(IMAGE) docker