From 18ba22ef8450080de7a835369550e75fbf043ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Calero=20Valdez?= Date: Sat, 11 Nov 2023 16:48:37 +0100 Subject: [PATCH] updated readme and added renv. --- .Rbuildignore | 2 + .Rprofile | 1 + DESCRIPTION | 2 +- NAMESPACE | 1 + README.Rmd | 23 +- README.md | 26 +- man/colhex2col.Rd | 20 + renv.lock | 1519 +++++++++++++++++++++++++++++++++++++++++++++ renv/.gitignore | 7 + renv/activate.R | 1180 +++++++++++++++++++++++++++++++++++ rstudio.png | Bin 0 -> 65231 bytes 11 files changed, 2760 insertions(+), 21 deletions(-) create mode 100644 .Rprofile create mode 100644 man/colhex2col.Rd create mode 100644 renv.lock create mode 100644 renv/.gitignore create mode 100644 renv/activate.R create mode 100644 rstudio.png diff --git a/.Rbuildignore b/.Rbuildignore index 1d1e5d0..4caddbd 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,5 @@ +^renv$ +^renv\.lock$ ^seminrstudio\.Rproj$ ^\.Rproj\.user$ ^README\.Rmd$ diff --git a/.Rprofile b/.Rprofile new file mode 100644 index 0000000..81b960f --- /dev/null +++ b/.Rprofile @@ -0,0 +1 @@ +source("renv/activate.R") diff --git a/DESCRIPTION b/DESCRIPTION index 95d0f08..05451cb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -14,7 +14,7 @@ License: GPL (>= 3) Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.1.1 +RoxygenNote: 7.1.2 URL: https://github.com/sem-in-r/seminrstudio BugReports: https://github.com/sem-in-r/seminrstudio/issues Imports: diff --git a/NAMESPACE b/NAMESPACE index 6a72435..7e217e4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,4 +1,5 @@ # Generated by roxygen2: do not edit by hand +export(colhex2col) export(custom_theme_addin) import(seminr) diff --git a/README.Rmd b/README.Rmd index 0d3e67c..9f61c6f 100644 --- a/README.Rmd +++ b/README.Rmd @@ -15,8 +15,8 @@ knitr::opts_chunk$set( # seminrstudio - -[![R-CMD-check](https://github.com/sem-in-r/seminrstudio/workflows/R-CMD-check/badge.svg)](https://github.com/sem-in-r/seminrstudio/actions) + [![CRAN status](https://www.r-pkg.org/badges/version/seminrstudio)](https://CRAN.R-project.org/package=seminrstudio) [![Codecov test coverage](https://codecov.io/gh/sem-in-r/seminrstudio/branch/master/graph/badge.svg)](https://codecov.io/gh/sem-in-r/seminrstudio?branch=master) @@ -26,13 +26,8 @@ Features are made available as RStudio Addins. ## Installation -You can install the released version of seminrstudio from [CRAN](https://CRAN.R-project.org) with: -``` r -install.packages("seminrstudio") -``` - -Alternatively you can install seminrstudio directly from Github. +You can install seminrstudio directly from Github. ```r if(!require(remotes)) { @@ -41,10 +36,20 @@ if(!require(remotes)) { remotes::install_github("sem-in-r/seminrstudio") ``` +Someday, you will be able to install the released version of seminrstudio from [CRAN](https://CRAN.R-project.org) with: + +``` r +install.packages("seminrstudio") +``` + +But not yet. :( + + ## Usage The following tools are implemented at the moment: -- Theme Editor: A tool to design a seminr_theme +- Theme Editor: A tool to design a seminr_theme. Install the package. Load it once and you should have a new RStudio "Addin". +![](rstudio.png) diff --git a/README.md b/README.md index fd1a66e..18d7b1e 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ # seminrstudio - + -[![R-CMD-check](https://github.com/sem-in-r/seminrstudio/workflows/R-CMD-check/badge.svg)](https://github.com/sem-in-r/seminrstudio/actions) [![CRAN status](https://www.r-pkg.org/badges/version/seminrstudio)](https://CRAN.R-project.org/package=seminrstudio) [![Codecov test @@ -17,14 +17,7 @@ The goal of seminrstudio is to to provide a UI based interface to the ## Installation -You can install the released version of seminrstudio from -[CRAN](https://CRAN.R-project.org) with: - -``` r -install.packages("seminrstudio") -``` - -Alternatively you can install seminrstudio directly from Github. +You can install seminrstudio directly from Github. ``` r if(!require(remotes)) { @@ -33,8 +26,19 @@ if(!require(remotes)) { remotes::install_github("sem-in-r/seminrstudio") ``` +Someday, you will be able to install the released version of +seminrstudio from [CRAN](https://CRAN.R-project.org) with: + +``` r +install.packages("seminrstudio") +``` + +But not yet. :( + ## Usage The following tools are implemented at the moment: - - Theme Editor: A tool to design a seminr\_theme +- Theme Editor: A tool to design a seminr_theme. Install the package. + Load it once and you should have a new RStudio “Addin”. + ![](rstudio.png) diff --git a/man/colhex2col.Rd b/man/colhex2col.Rd new file mode 100644 index 0000000..4a37b1c --- /dev/null +++ b/man/colhex2col.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/color_utils.R +\name{colhex2col} +\alias{colhex2col} +\title{Convert a hex color to X11} +\usage{ +colhex2col(colhex) +} +\arguments{ +\item{colhex}{A hex color string} +} +\value{ +returns the most similar X11 colour string +} +\description{ +Convert a hex color to X11 +} +\examples{ +colhex2col("#A37BF0") +} diff --git a/renv.lock b/renv.lock new file mode 100644 index 0000000..70afda1 --- /dev/null +++ b/renv.lock @@ -0,0 +1,1519 @@ +{ + "R": { + "Version": "4.1.2", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cloud.r-project.org" + } + ] + }, + "Packages": { + "DiagrammeR": { + "Package": "DiagrammeR", + "Version": "1.0.10", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "RColorBrewer", + "downloader", + "dplyr", + "glue", + "htmltools", + "htmlwidgets", + "igraph", + "magrittr", + "purrr", + "readr", + "rlang", + "rstudioapi", + "scales", + "stringr", + "tibble", + "tidyr", + "viridis", + "visNetwork" + ], + "Hash": "f3de4a4878163a4629a528bbcc6e655d" + }, + "DiagrammeRsvg": { + "Package": "DiagrammeRsvg", + "Version": "0.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "V8" + ], + "Hash": "21e1cb313a641634215226782a49e5a1" + }, + "MASS": { + "Package": "MASS", + "Version": "7.3-54", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "methods", + "stats", + "utils" + ], + "Hash": "0e59129db205112e3963904db67fd0dc" + }, + "Matrix": { + "Package": "Matrix", + "Version": "1.3-4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "graphics", + "grid", + "lattice", + "methods", + "stats", + "utils" + ], + "Hash": "4ed05e9c9726267e4a5872e09c04587c" + }, + "R6": { + "Package": "R6", + "Version": "2.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" + }, + "RColorBrewer": { + "Package": "RColorBrewer", + "Version": "1.1-3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "45f0398006e83a5b10b72a90663d8d8c" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.0.11", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "methods", + "utils" + ], + "Hash": "ae6cbbe1492f4de79c45fce06f967ce8" + }, + "V8": { + "Package": "V8", + "Version": "4.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Rcpp", + "curl", + "jsonlite", + "utils" + ], + "Hash": "df924bedbdcaaf3b1d3ac7ed94f4d001" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "543776ae6848fde2f48ff3816d0628bc" + }, + "bit": { + "Package": "bit", + "Version": "4.0.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "d242abec29412ce988848d0294b208fd" + }, + "bit64": { + "Package": "bit64", + "Version": "4.0.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bit", + "methods", + "stats", + "utils" + ], + "Hash": "9fe98599ca456d6552421db0d6772d8f" + }, + "brio": { + "Package": "brio", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "976cf154dfb043c012d87cddd8bca363" + }, + "bslib": { + "Package": "bslib", + "Version": "0.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "base64enc", + "cachem", + "grDevices", + "htmltools", + "jquerylib", + "jsonlite", + "memoise", + "mime", + "rlang", + "sass" + ], + "Hash": "283015ddfbb9d7bf15ea9f0b5698f0d9" + }, + "cachem": { + "Package": "cachem", + "Version": "1.0.8", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "fastmap", + "rlang" + ], + "Hash": "c35768291560ce302c0a6589f92e837d" + }, + "callr": { + "Package": "callr", + "Version": "3.7.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "processx", + "utils" + ], + "Hash": "9b2191ede20fa29828139b9900922e51" + }, + "cli": { + "Package": "cli", + "Version": "3.6.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "89e6d8219950eac806ae0c489052048a" + }, + "clipr": { + "Package": "clipr", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + }, + "colorspace": { + "Package": "colorspace", + "Version": "2.1-0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "methods", + "stats" + ], + "Hash": "f20c47fd52fae58b4e377c37bb8c335b" + }, + "colourpicker": { + "Package": "colourpicker", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "ggplot2", + "htmltools", + "htmlwidgets", + "jsonlite", + "miniUI", + "shiny", + "shinyjs", + "utils" + ], + "Hash": "daec8f7d4ba89df06fe2c0802c3a9dac" + }, + "commonmark": { + "Package": "commonmark", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "d691c61bff84bd63c383874d2d0c3307" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.4.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "707fae4bbf73697ec8d85f9d7076c061" + }, + "crayon": { + "Package": "crayon", + "Version": "1.5.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "e8a1e41acf02548751f45c718d55aa6a" + }, + "curl": { + "Package": "curl", + "Version": "5.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "9123f3ef96a2c1a93927d828b2fe7d4c" + }, + "desc": { + "Package": "desc", + "Version": "1.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "rprojroot", + "utils" + ], + "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" + }, + "diffobj": { + "Package": "diffobj", + "Version": "0.3.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + }, + "digest": { + "Package": "digest", + "Version": "0.6.33", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "b18a9cf3c003977b0cc49d5e76ebe48d" + }, + "downloader": { + "Package": "downloader", + "Version": "0.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "digest", + "utils" + ], + "Hash": "f4f2a915e0dedbdf016a83b63477349f" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "generics", + "glue", + "lifecycle", + "magrittr", + "methods", + "pillar", + "rlang", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "e85ffbebaad5f70e1a2e2ef4302b4949" + }, + "ellipsis": { + "Package": "ellipsis", + "Version": "0.3.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "rlang" + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + }, + "evaluate": { + "Package": "evaluate", + "Version": "0.23", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "daf4a1246be12c1fa8c7705a0935c1a0" + }, + "fansi": { + "Package": "fansi", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "3e8583a60163b4bc1a80016e63b9959e" + }, + "farver": { + "Package": "farver", + "Version": "2.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "8106d78941f34855c440ddb946b8f7a5" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "f7736a18de97dea803bde0a2daaafb27" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" + }, + "fs": { + "Package": "fs", + "Version": "1.6.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "47b5f30c720c23999b913a1a635cf0bb" + }, + "generics": { + "Package": "generics", + "Version": "0.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "15e9634c0fcd294799e9b2e929ed1b86" + }, + "ggplot2": { + "Package": "ggplot2", + "Version": "3.4.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "MASS", + "R", + "cli", + "glue", + "grDevices", + "grid", + "gtable", + "isoband", + "lifecycle", + "mgcv", + "rlang", + "scales", + "stats", + "tibble", + "vctrs", + "withr" + ], + "Hash": "313d31eff2274ecf4c1d3581db7241f9" + }, + "glue": { + "Package": "glue", + "Version": "1.6.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + }, + "gridExtra": { + "Package": "gridExtra", + "Version": "2.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "grDevices", + "graphics", + "grid", + "gtable", + "utils" + ], + "Hash": "7d7f283939f563670a697165b2cf5560" + }, + "gtable": { + "Package": "gtable", + "Version": "0.3.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "grid", + "lifecycle", + "rlang" + ], + "Hash": "b29cf3031f49b04ab9c852c912547eef" + }, + "highr": { + "Package": "highr", + "Version": "0.10", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "xfun" + ], + "Hash": "06230136b2d2b9ba5805e1963fa6e890" + }, + "hms": { + "Package": "hms", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "lifecycle", + "methods", + "pkgconfig", + "rlang", + "vctrs" + ], + "Hash": "b59377caa7ed00fa41808342002138f9" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "base64enc", + "digest", + "ellipsis", + "fastmap", + "grDevices", + "rlang", + "utils" + ], + "Hash": "2d7b3857980e0e0d0a1fd6f11928ab0f" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "grDevices", + "htmltools", + "jsonlite", + "knitr", + "rmarkdown", + "yaml" + ], + "Hash": "a865aa85bcb2697f47505bfd70422471" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.12", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "Rcpp", + "later", + "promises", + "utils" + ], + "Hash": "c992f75861325961c29a188b45e549f7" + }, + "igraph": { + "Package": "igraph", + "Version": "1.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Matrix", + "R", + "cli", + "cpp11", + "grDevices", + "graphics", + "lifecycle", + "magrittr", + "methods", + "pkgconfig", + "rlang", + "stats", + "utils" + ], + "Hash": "80401cb5ec513e8ddc56764d03f63669" + }, + "isoband": { + "Package": "isoband", + "Version": "0.2.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "grid", + "utils" + ], + "Hash": "0080607b4a1a7b28979aecef976d8bc2" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools" + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "1.8.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "methods" + ], + "Hash": "266a20443ca13c65688b2116d5220f76" + }, + "knitr": { + "Package": "knitr", + "Version": "1.45", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "evaluate", + "highr", + "methods", + "tools", + "xfun", + "yaml" + ], + "Hash": "1ec462871063897135c1bcbe0fc8f07d" + }, + "labeling": { + "Package": "labeling", + "Version": "0.4.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "graphics", + "stats" + ], + "Hash": "b64ec208ac5bc1852b285f665d6368b3" + }, + "later": { + "Package": "later", + "Version": "1.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Rcpp", + "rlang" + ], + "Hash": "40401c9cf2bc2259dfe83311c9384710" + }, + "lattice": { + "Package": "lattice", + "Version": "0.20-45", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "grid", + "stats", + "utils" + ], + "Hash": "b64cdbb2b340437c4ee047a1f4c4377b" + }, + "lavaan": { + "Package": "lavaan", + "Version": "0.6-16", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "MASS", + "R", + "graphics", + "methods", + "mnormt", + "numDeriv", + "pbivnorm", + "quadprog", + "stats", + "stats4", + "utils" + ], + "Hash": "6dbce6012efbb98656aa0e924393632e" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "rlang" + ], + "Hash": "b8552d117e1b808b09a832f589b79035" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "7ce2733a9826b3aeb1775d56fd305472" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "cachem", + "rlang" + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + }, + "mgcv": { + "Package": "mgcv", + "Version": "1.8-38", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Matrix", + "R", + "graphics", + "methods", + "nlme", + "splines", + "stats", + "utils" + ], + "Hash": "be3c61ffbb1e3d3b3df214d192ac5444" + }, + "mime": { + "Package": "mime", + "Version": "0.12", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "tools" + ], + "Hash": "18e9c28c1d3ca1560ce30658b22ce104" + }, + "miniUI": { + "Package": "miniUI", + "Version": "0.1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools", + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" + }, + "mnormt": { + "Package": "mnormt", + "Version": "2.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "c83992ef63553d1e4b97162a4a753470" + }, + "munsell": { + "Package": "munsell", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "colorspace", + "methods" + ], + "Hash": "6dfe8bf774944bd5595785e3229d8771" + }, + "nlme": { + "Package": "nlme", + "Version": "3.1-153", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "graphics", + "lattice", + "stats", + "utils" + ], + "Hash": "2d632e0d963a653a0329756ce701ecdd" + }, + "numDeriv": { + "Package": "numDeriv", + "Version": "2016.8-1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "df58958f293b166e4ab885ebcad90e02" + }, + "pbivnorm": { + "Package": "pbivnorm", + "Version": "0.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "643e16a7da6aac3e18cadc3e14abb94b" + }, + "pillar": { + "Package": "pillar", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "cli", + "fansi", + "glue", + "lifecycle", + "rlang", + "utf8", + "utils", + "vctrs" + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" + }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "crayon", + "desc", + "prettyunits", + "processx", + "rprojroot" + ], + "Hash": "beb25b32a957a22a5c301a9e441190b3" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" + }, + "pkgload": { + "Package": "pkgload", + "Version": "1.3.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "crayon", + "desc", + "fs", + "glue", + "methods", + "pkgbuild", + "rlang", + "rprojroot", + "utils", + "withr" + ], + "Hash": "903d68319ae9923fb2e2ee7fa8230b91" + }, + "praise": { + "Package": "praise", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "a555924add98c99d2f411e37e7d25e9f" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" + }, + "processx": { + "Package": "processx", + "Version": "3.8.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "ps", + "utils" + ], + "Hash": "3efbd8ac1be0296a46c55387aeace0f3" + }, + "progress": { + "Package": "progress", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "crayon", + "hms", + "prettyunits" + ], + "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" + }, + "promises": { + "Package": "promises", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "Rcpp", + "fastmap", + "later", + "magrittr", + "rlang", + "stats" + ], + "Hash": "0d8a15c9d000970ada1ab21405387dee" + }, + "ps": { + "Package": "ps", + "Version": "1.7.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "709d852d33178db54b17c722e5b1e594" + }, + "purrr": { + "Package": "purrr", + "Version": "1.0.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "rlang", + "vctrs" + ], + "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" + }, + "quadprog": { + "Package": "quadprog", + "Version": "1.5-8", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "5f919ae5e7f83a6f91dcf2288943370d" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "5e3c5dc0b071b21fa128676560dbe94d" + }, + "readr": { + "Package": "readr", + "Version": "2.1.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "clipr", + "cpp11", + "crayon", + "hms", + "lifecycle", + "methods", + "rlang", + "tibble", + "tzdb", + "utils", + "vroom" + ], + "Hash": "b5047343b3825f37ad9d3b5d89aa1078" + }, + "rematch2": { + "Package": "rematch2", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "tibble" + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" + }, + "renv": { + "Package": "renv", + "Version": "1.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "utils" + ], + "Hash": "41b847654f567341725473431dd0d5ab" + }, + "rlang": { + "Package": "rlang", + "Version": "1.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "50a6dbdc522936ca35afc5e2082ea91b" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.25", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "evaluate", + "fontawesome", + "htmltools", + "jquerylib", + "jsonlite", + "knitr", + "methods", + "stringr", + "tinytex", + "tools", + "utils", + "xfun", + "yaml" + ], + "Hash": "d65e35823c817f09f4de424fcdfa812a" + }, + "rprojroot": { + "Package": "rprojroot", + "Version": "2.0.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.15.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "5564500e25cffad9e22244ced1379887" + }, + "sass": { + "Package": "sass", + "Version": "0.4.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "fs", + "htmltools", + "rappdirs", + "rlang" + ], + "Hash": "6bd4d33b50ff927191ec9acbf52fd056" + }, + "scales": { + "Package": "scales", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "RColorBrewer", + "farver", + "labeling", + "lifecycle", + "munsell", + "rlang", + "viridisLite" + ], + "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" + }, + "seminr": { + "Package": "seminr", + "Version": "2.3.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DiagrammeR", + "DiagrammeRsvg", + "R", + "glue", + "knitr", + "lavaan", + "parallel", + "rmarkdown", + "testthat", + "webp" + ], + "Hash": "27f33ffecde1b78776c66d54065e9acf" + }, + "shiny": { + "Package": "shiny", + "Version": "1.7.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "bslib", + "cachem", + "commonmark", + "crayon", + "ellipsis", + "fastmap", + "fontawesome", + "glue", + "grDevices", + "htmltools", + "httpuv", + "jsonlite", + "later", + "lifecycle", + "methods", + "mime", + "promises", + "rlang", + "sourcetools", + "tools", + "utils", + "withr", + "xtable" + ], + "Hash": "5ec01cc255f2138fc2f0dc74d2b1a1a1" + }, + "shinyjs": { + "Package": "shinyjs", + "Version": "2.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "digest", + "jsonlite", + "shiny" + ], + "Hash": "802e4786b353a4bb27116957558548d5" + }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7-1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "5f5a7629f956619d519205ec475fe647" + }, + "stringi": { + "Package": "stringi", + "Version": "1.7.12", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + }, + "stringr": { + "Package": "stringr", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "magrittr", + "rlang", + "stringi", + "vctrs" + ], + "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + }, + "testthat": { + "Package": "testthat", + "Version": "3.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "brio", + "callr", + "cli", + "desc", + "digest", + "ellipsis", + "evaluate", + "jsonlite", + "lifecycle", + "magrittr", + "methods", + "pkgload", + "praise", + "processx", + "ps", + "rlang", + "utils", + "waldo", + "withr" + ], + "Hash": "877508719fcb8c9525eccdadf07a5102" + }, + "tibble": { + "Package": "tibble", + "Version": "3.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "fansi", + "lifecycle", + "magrittr", + "methods", + "pillar", + "pkgconfig", + "rlang", + "utils", + "vctrs" + ], + "Hash": "a84e2cc86d07289b3b6f5069df7a004c" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "cpp11", + "dplyr", + "glue", + "lifecycle", + "magrittr", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang", + "vctrs", + "withr" + ], + "Hash": "79540e5fcd9e0435af547d885f184fd5" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.48", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "xfun" + ], + "Hash": "8f96d229b7311beb32b94cf413b13f84" + }, + "tzdb": { + "Package": "tzdb", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "f561504ec2897f4d46f0c7657e488ae1" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "62b65c52671e6665f803ff02954446e9" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.6.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang" + ], + "Hash": "266c1ca411266ba8f365fcc726444b87" + }, + "viridis": { + "Package": "viridis", + "Version": "0.6.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "ggplot2", + "gridExtra", + "viridisLite" + ], + "Hash": "80cd127bc8c9d3d9f0904ead9a9102f1" + }, + "viridisLite": { + "Package": "viridisLite", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" + }, + "visNetwork": { + "Package": "visNetwork", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "htmltools", + "htmlwidgets", + "jsonlite", + "magrittr", + "methods", + "stats", + "utils" + ], + "Hash": "3e48b097e8d9a91ecced2ed4817a678d" + }, + "vroom": { + "Package": "vroom", + "Version": "1.6.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bit64", + "cli", + "cpp11", + "crayon", + "glue", + "hms", + "lifecycle", + "methods", + "progress", + "rlang", + "stats", + "tibble", + "tidyselect", + "tzdb", + "vctrs", + "withr" + ], + "Hash": "9db52c1656cf19c124f93124ea57f0fd" + }, + "waldo": { + "Package": "waldo", + "Version": "0.5.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "diffobj", + "fansi", + "glue", + "methods", + "rematch2", + "rlang", + "tibble" + ], + "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" + }, + "webp": { + "Package": "webp", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "7dbdc8c7197add087e67c2d348aaf84d" + }, + "withr": { + "Package": "withr", + "Version": "2.5.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "4b25e70111b7d644322e9513f403a272" + }, + "xfun": { + "Package": "xfun", + "Version": "0.41", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "stats", + "tools" + ], + "Hash": "460a5e0fe46a80ef87424ad216028014" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.7", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + } + } +} diff --git a/renv/.gitignore b/renv/.gitignore new file mode 100644 index 0000000..0ec0cbb --- /dev/null +++ b/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ diff --git a/renv/activate.R b/renv/activate.R new file mode 100644 index 0000000..cb5401f --- /dev/null +++ b/renv/activate.R @@ -0,0 +1,1180 @@ + +local({ + + # the requested version of renv + version <- "1.0.3" + attr(version, "sha") <- NULL + + # the project directory + project <- getwd() + + # use start-up diagnostics if enabled + diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") + if (diagnostics) { + start <- Sys.time() + profile <- tempfile("renv-startup-", fileext = ".Rprof") + utils::Rprof(profile) + on.exit({ + utils::Rprof(NULL) + elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) + writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) + writeLines(sprintf("- Profile: %s", profile)) + print(utils::summaryRprof(profile)) + }, add = TRUE) + } + + # figure out whether the autoloader is enabled + enabled <- local({ + + # first, check config option + override <- getOption("renv.config.autoloader.enabled") + if (!is.null(override)) + return(override) + + # next, check environment variables + # TODO: prefer using the configuration one in the future + envvars <- c( + "RENV_CONFIG_AUTOLOADER_ENABLED", + "RENV_AUTOLOADER_ENABLED", + "RENV_ACTIVATE_PROJECT" + ) + + for (envvar in envvars) { + envval <- Sys.getenv(envvar, unset = NA) + if (!is.na(envval)) + return(tolower(envval) %in% c("true", "t", "1")) + } + + # enable by default + TRUE + + }) + + if (!enabled) + return(FALSE) + + # avoid recursion + if (identical(getOption("renv.autoloader.running"), TRUE)) { + warning("ignoring recursive attempt to run renv autoloader") + return(invisible(TRUE)) + } + + # signal that we're loading renv during R startup + options(renv.autoloader.running = TRUE) + on.exit(options(renv.autoloader.running = NULL), add = TRUE) + + # signal that we've consented to use renv + options(renv.consent = TRUE) + + # load the 'utils' package eagerly -- this ensures that renv shims, which + # mask 'utils' packages, will come first on the search path + library(utils, lib.loc = .Library) + + # unload renv if it's already been loaded + if ("renv" %in% loadedNamespaces()) + unloadNamespace("renv") + + # load bootstrap tools + `%||%` <- function(x, y) { + if (is.null(x)) y else x + } + + catf <- function(fmt, ..., appendLF = TRUE) { + + quiet <- getOption("renv.bootstrap.quiet", default = FALSE) + if (quiet) + return(invisible()) + + msg <- sprintf(fmt, ...) + cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") + + invisible(msg) + + } + + header <- function(label, + ..., + prefix = "#", + suffix = "-", + n = min(getOption("width"), 78)) + { + label <- sprintf(label, ...) + n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) + if (n <= 0) + return(paste(prefix, label)) + + tail <- paste(rep.int(suffix, n), collapse = "") + paste0(prefix, " ", label, " ", tail) + + } + + startswith <- function(string, prefix) { + substring(string, 1, nchar(prefix)) == prefix + } + + bootstrap <- function(version, library) { + + friendly <- renv_bootstrap_version_friendly(version) + section <- header(sprintf("Bootstrapping renv %s", friendly)) + catf(section) + + # attempt to download renv + catf("- Downloading renv ... ", appendLF = FALSE) + withCallingHandlers( + tarball <- renv_bootstrap_download(version), + error = function(err) { + catf("FAILED") + stop("failed to download:\n", conditionMessage(err)) + } + ) + catf("OK") + on.exit(unlink(tarball), add = TRUE) + + # now attempt to install + catf("- Installing renv ... ", appendLF = FALSE) + withCallingHandlers( + status <- renv_bootstrap_install(version, tarball, library), + error = function(err) { + catf("FAILED") + stop("failed to install:\n", conditionMessage(err)) + } + ) + catf("OK") + + # add empty line to break up bootstrapping from normal output + catf("") + + return(invisible()) + } + + renv_bootstrap_tests_running <- function() { + getOption("renv.tests.running", default = FALSE) + } + + renv_bootstrap_repos <- function() { + + # get CRAN repository + cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") + + # check for repos override + repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) + if (!is.na(repos)) { + + # check for RSPM; if set, use a fallback repository for renv + rspm <- Sys.getenv("RSPM", unset = NA) + if (identical(rspm, repos)) + repos <- c(RSPM = rspm, CRAN = cran) + + return(repos) + + } + + # check for lockfile repositories + repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) + if (!inherits(repos, "error") && length(repos)) + return(repos) + + # retrieve current repos + repos <- getOption("repos") + + # ensure @CRAN@ entries are resolved + repos[repos == "@CRAN@"] <- cran + + # add in renv.bootstrap.repos if set + default <- c(FALLBACK = "https://cloud.r-project.org") + extra <- getOption("renv.bootstrap.repos", default = default) + repos <- c(repos, extra) + + # remove duplicates that might've snuck in + dupes <- duplicated(repos) | duplicated(names(repos)) + repos[!dupes] + + } + + renv_bootstrap_repos_lockfile <- function() { + + lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") + if (!file.exists(lockpath)) + return(NULL) + + lockfile <- tryCatch(renv_json_read(lockpath), error = identity) + if (inherits(lockfile, "error")) { + warning(lockfile) + return(NULL) + } + + repos <- lockfile$R$Repositories + if (length(repos) == 0) + return(NULL) + + keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) + vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) + names(vals) <- keys + + return(vals) + + } + + renv_bootstrap_download <- function(version) { + + sha <- attr(version, "sha", exact = TRUE) + + methods <- if (!is.null(sha)) { + + # attempting to bootstrap a development version of renv + c( + function() renv_bootstrap_download_tarball(sha), + function() renv_bootstrap_download_github(sha) + ) + + } else { + + # attempting to bootstrap a release version of renv + c( + function() renv_bootstrap_download_tarball(version), + function() renv_bootstrap_download_cran_latest(version), + function() renv_bootstrap_download_cran_archive(version) + ) + + } + + for (method in methods) { + path <- tryCatch(method(), error = identity) + if (is.character(path) && file.exists(path)) + return(path) + } + + stop("All download methods failed") + + } + + renv_bootstrap_download_impl <- function(url, destfile) { + + mode <- "wb" + + # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 + fixup <- + Sys.info()[["sysname"]] == "Windows" && + substring(url, 1L, 5L) == "file:" + + if (fixup) + mode <- "w+b" + + args <- list( + url = url, + destfile = destfile, + mode = mode, + quiet = TRUE + ) + + if ("headers" %in% names(formals(utils::download.file))) + args$headers <- renv_bootstrap_download_custom_headers(url) + + do.call(utils::download.file, args) + + } + + renv_bootstrap_download_custom_headers <- function(url) { + + headers <- getOption("renv.download.headers") + if (is.null(headers)) + return(character()) + + if (!is.function(headers)) + stopf("'renv.download.headers' is not a function") + + headers <- headers(url) + if (length(headers) == 0L) + return(character()) + + if (is.list(headers)) + headers <- unlist(headers, recursive = FALSE, use.names = TRUE) + + ok <- + is.character(headers) && + is.character(names(headers)) && + all(nzchar(names(headers))) + + if (!ok) + stop("invocation of 'renv.download.headers' did not return a named character vector") + + headers + + } + + renv_bootstrap_download_cran_latest <- function(version) { + + spec <- renv_bootstrap_download_cran_latest_find(version) + type <- spec$type + repos <- spec$repos + + baseurl <- utils::contrib.url(repos = repos, type = type) + ext <- if (identical(type, "source")) + ".tar.gz" + else if (Sys.info()[["sysname"]] == "Windows") + ".zip" + else + ".tgz" + name <- sprintf("renv_%s%s", version, ext) + url <- paste(baseurl, name, sep = "/") + + destfile <- file.path(tempdir(), name) + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (inherits(status, "condition")) + return(FALSE) + + # report success and return + destfile + + } + + renv_bootstrap_download_cran_latest_find <- function(version) { + + # check whether binaries are supported on this system + binary <- + getOption("renv.bootstrap.binary", default = TRUE) && + !identical(.Platform$pkgType, "source") && + !identical(getOption("pkgType"), "source") && + Sys.info()[["sysname"]] %in% c("Darwin", "Windows") + + types <- c(if (binary) "binary", "source") + + # iterate over types + repositories + for (type in types) { + for (repos in renv_bootstrap_repos()) { + + # retrieve package database + db <- tryCatch( + as.data.frame( + utils::available.packages(type = type, repos = repos), + stringsAsFactors = FALSE + ), + error = identity + ) + + if (inherits(db, "error")) + next + + # check for compatible entry + entry <- db[db$Package %in% "renv" & db$Version %in% version, ] + if (nrow(entry) == 0) + next + + # found it; return spec to caller + spec <- list(entry = entry, type = type, repos = repos) + return(spec) + + } + } + + # if we got here, we failed to find renv + fmt <- "renv %s is not available from your declared package repositories" + stop(sprintf(fmt, version)) + + } + + renv_bootstrap_download_cran_archive <- function(version) { + + name <- sprintf("renv_%s.tar.gz", version) + repos <- renv_bootstrap_repos() + urls <- file.path(repos, "src/contrib/Archive/renv", name) + destfile <- file.path(tempdir(), name) + + for (url in urls) { + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (identical(status, 0L)) + return(destfile) + + } + + return(FALSE) + + } + + renv_bootstrap_download_tarball <- function(version) { + + # if the user has provided the path to a tarball via + # an environment variable, then use it + tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) + if (is.na(tarball)) + return() + + # allow directories + if (dir.exists(tarball)) { + name <- sprintf("renv_%s.tar.gz", version) + tarball <- file.path(tarball, name) + } + + # bail if it doesn't exist + if (!file.exists(tarball)) { + + # let the user know we weren't able to honour their request + fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." + msg <- sprintf(fmt, tarball) + warning(msg) + + # bail + return() + + } + + catf("- Using local tarball '%s'.", tarball) + tarball + + } + + renv_bootstrap_download_github <- function(version) { + + enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") + if (!identical(enabled, "TRUE")) + return(FALSE) + + # prepare download options + pat <- Sys.getenv("GITHUB_PAT") + if (nzchar(Sys.which("curl")) && nzchar(pat)) { + fmt <- "--location --fail --header \"Authorization: token %s\"" + extra <- sprintf(fmt, pat) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "curl", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { + fmt <- "--header=\"Authorization: token %s\"" + extra <- sprintf(fmt, pat) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "wget", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } + + url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) + name <- sprintf("renv_%s.tar.gz", version) + destfile <- file.path(tempdir(), name) + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (!identical(status, 0L)) + return(FALSE) + + renv_bootstrap_download_augment(destfile) + + return(destfile) + + } + + # Add Sha to DESCRIPTION. This is stop gap until #890, after which we + # can use renv::install() to fully capture metadata. + renv_bootstrap_download_augment <- function(destfile) { + sha <- renv_bootstrap_git_extract_sha1_tar(destfile) + if (is.null(sha)) { + return() + } + + # Untar + tempdir <- tempfile("renv-github-") + on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) + untar(destfile, exdir = tempdir) + pkgdir <- dir(tempdir, full.names = TRUE)[[1]] + + # Modify description + desc_path <- file.path(pkgdir, "DESCRIPTION") + desc_lines <- readLines(desc_path) + remotes_fields <- c( + "RemoteType: github", + "RemoteHost: api.github.com", + "RemoteRepo: renv", + "RemoteUsername: rstudio", + "RemotePkgRef: rstudio/renv", + paste("RemoteRef: ", sha), + paste("RemoteSha: ", sha) + ) + writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) + + # Re-tar + local({ + old <- setwd(tempdir) + on.exit(setwd(old), add = TRUE) + + tar(destfile, compression = "gzip") + }) + invisible() + } + + # Extract the commit hash from a git archive. Git archives include the SHA1 + # hash as the comment field of the tarball pax extended header + # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) + # For GitHub archives this should be the first header after the default one + # (512 byte) header. + renv_bootstrap_git_extract_sha1_tar <- function(bundle) { + + # open the bundle for reading + # We use gzcon for everything because (from ?gzcon) + # > Reading from a connection which does not supply a 'gzip' magic + # > header is equivalent to reading from the original connection + conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) + on.exit(close(conn)) + + # The default pax header is 512 bytes long and the first pax extended header + # with the comment should be 51 bytes long + # `52 comment=` (11 chars) + 40 byte SHA1 hash + len <- 0x200 + 0x33 + res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) + + if (grepl("^52 comment=", res)) { + sub("52 comment=", "", res) + } else { + NULL + } + } + + renv_bootstrap_install <- function(version, tarball, library) { + + # attempt to install it into project library + dir.create(library, showWarnings = FALSE, recursive = TRUE) + output <- renv_bootstrap_install_impl(library, tarball) + + # check for successful install + status <- attr(output, "status") + if (is.null(status) || identical(status, 0L)) + return(status) + + # an error occurred; report it + header <- "installation of renv failed" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- paste(c(header, lines, output), collapse = "\n") + stop(text) + + } + + renv_bootstrap_install_impl <- function(library, tarball) { + + # invoke using system2 so we can capture and report output + bin <- R.home("bin") + exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" + R <- file.path(bin, exe) + + args <- c( + "--vanilla", "CMD", "INSTALL", "--no-multiarch", + "-l", shQuote(path.expand(library)), + shQuote(path.expand(tarball)) + ) + + system2(R, args, stdout = TRUE, stderr = TRUE) + + } + + renv_bootstrap_platform_prefix <- function() { + + # construct version prefix + version <- paste(R.version$major, R.version$minor, sep = ".") + prefix <- paste("R", numeric_version(version)[1, 1:2], sep = "-") + + # include SVN revision for development versions of R + # (to avoid sharing platform-specific artefacts with released versions of R) + devel <- + identical(R.version[["status"]], "Under development (unstable)") || + identical(R.version[["nickname"]], "Unsuffered Consequences") + + if (devel) + prefix <- paste(prefix, R.version[["svn rev"]], sep = "-r") + + # build list of path components + components <- c(prefix, R.version$platform) + + # include prefix if provided by user + prefix <- renv_bootstrap_platform_prefix_impl() + if (!is.na(prefix) && nzchar(prefix)) + components <- c(prefix, components) + + # build prefix + paste(components, collapse = "/") + + } + + renv_bootstrap_platform_prefix_impl <- function() { + + # if an explicit prefix has been supplied, use it + prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) + if (!is.na(prefix)) + return(prefix) + + # if the user has requested an automatic prefix, generate it + auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) + if (auto %in% c("TRUE", "True", "true", "1")) + return(renv_bootstrap_platform_prefix_auto()) + + # empty string on failure + "" + + } + + renv_bootstrap_platform_prefix_auto <- function() { + + prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) + if (inherits(prefix, "error") || prefix %in% "unknown") { + + msg <- paste( + "failed to infer current operating system", + "please file a bug report at https://github.com/rstudio/renv/issues", + sep = "; " + ) + + warning(msg) + + } + + prefix + + } + + renv_bootstrap_platform_os <- function() { + + sysinfo <- Sys.info() + sysname <- sysinfo[["sysname"]] + + # handle Windows + macOS up front + if (sysname == "Windows") + return("windows") + else if (sysname == "Darwin") + return("macos") + + # check for os-release files + for (file in c("/etc/os-release", "/usr/lib/os-release")) + if (file.exists(file)) + return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) + + # check for redhat-release files + if (file.exists("/etc/redhat-release")) + return(renv_bootstrap_platform_os_via_redhat_release()) + + "unknown" + + } + + renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { + + # read /etc/os-release + release <- utils::read.table( + file = file, + sep = "=", + quote = c("\"", "'"), + col.names = c("Key", "Value"), + comment.char = "#", + stringsAsFactors = FALSE + ) + + vars <- as.list(release$Value) + names(vars) <- release$Key + + # get os name + os <- tolower(sysinfo[["sysname"]]) + + # read id + id <- "unknown" + for (field in c("ID", "ID_LIKE")) { + if (field %in% names(vars) && nzchar(vars[[field]])) { + id <- vars[[field]] + break + } + } + + # read version + version <- "unknown" + for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { + if (field %in% names(vars) && nzchar(vars[[field]])) { + version <- vars[[field]] + break + } + } + + # join together + paste(c(os, id, version), collapse = "-") + + } + + renv_bootstrap_platform_os_via_redhat_release <- function() { + + # read /etc/redhat-release + contents <- readLines("/etc/redhat-release", warn = FALSE) + + # infer id + id <- if (grepl("centos", contents, ignore.case = TRUE)) + "centos" + else if (grepl("redhat", contents, ignore.case = TRUE)) + "redhat" + else + "unknown" + + # try to find a version component (very hacky) + version <- "unknown" + + parts <- strsplit(contents, "[[:space:]]")[[1L]] + for (part in parts) { + + nv <- tryCatch(numeric_version(part), error = identity) + if (inherits(nv, "error")) + next + + version <- nv[1, 1] + break + + } + + paste(c("linux", id, version), collapse = "-") + + } + + renv_bootstrap_library_root_name <- function(project) { + + # use project name as-is if requested + asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") + if (asis) + return(basename(project)) + + # otherwise, disambiguate based on project's path + id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) + paste(basename(project), id, sep = "-") + + } + + renv_bootstrap_library_root <- function(project) { + + prefix <- renv_bootstrap_profile_prefix() + + path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) + if (!is.na(path)) + return(paste(c(path, prefix), collapse = "/")) + + path <- renv_bootstrap_library_root_impl(project) + if (!is.null(path)) { + name <- renv_bootstrap_library_root_name(project) + return(paste(c(path, prefix, name), collapse = "/")) + } + + renv_bootstrap_paths_renv("library", project = project) + + } + + renv_bootstrap_library_root_impl <- function(project) { + + root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) + if (!is.na(root)) + return(root) + + type <- renv_bootstrap_project_type(project) + if (identical(type, "package")) { + userdir <- renv_bootstrap_user_dir() + return(file.path(userdir, "library")) + } + + } + + renv_bootstrap_validate_version <- function(version, description = NULL) { + + # resolve description file + # + # avoid passing lib.loc to `packageDescription()` below, since R will + # use the loaded version of the package by default anyhow. note that + # this function should only be called after 'renv' is loaded + # https://github.com/rstudio/renv/issues/1625 + description <- description %||% packageDescription("renv") + + # check whether requested version 'version' matches loaded version of renv + sha <- attr(version, "sha", exact = TRUE) + valid <- if (!is.null(sha)) + renv_bootstrap_validate_version_dev(sha, description) + else + renv_bootstrap_validate_version_release(version, description) + + if (valid) + return(TRUE) + + # the loaded version of renv doesn't match the requested version; + # give the user instructions on how to proceed + remote <- if (!is.null(description[["RemoteSha"]])) { + paste("rstudio/renv", description[["RemoteSha"]], sep = "@") + } else { + paste("renv", description[["Version"]], sep = "@") + } + + # display both loaded version + sha if available + friendly <- renv_bootstrap_version_friendly( + version = description[["Version"]], + sha = description[["RemoteSha"]] + ) + + fmt <- paste( + "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", + "- Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", + "- Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", + sep = "\n" + ) + catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) + + FALSE + + } + + renv_bootstrap_validate_version_dev <- function(version, description) { + expected <- description[["RemoteSha"]] + is.character(expected) && startswith(expected, version) + } + + renv_bootstrap_validate_version_release <- function(version, description) { + expected <- description[["Version"]] + is.character(expected) && identical(expected, version) + } + + renv_bootstrap_hash_text <- function(text) { + + hashfile <- tempfile("renv-hash-") + on.exit(unlink(hashfile), add = TRUE) + + writeLines(text, con = hashfile) + tools::md5sum(hashfile) + + } + + renv_bootstrap_load <- function(project, libpath, version) { + + # try to load renv from the project library + if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) + return(FALSE) + + # warn if the version of renv loaded does not match + renv_bootstrap_validate_version(version) + + # execute renv load hooks, if any + hooks <- getHook("renv::autoload") + for (hook in hooks) + if (is.function(hook)) + tryCatch(hook(), error = warnify) + + # load the project + renv::load(project) + + TRUE + + } + + renv_bootstrap_profile_load <- function(project) { + + # if RENV_PROFILE is already set, just use that + profile <- Sys.getenv("RENV_PROFILE", unset = NA) + if (!is.na(profile) && nzchar(profile)) + return(profile) + + # check for a profile file (nothing to do if it doesn't exist) + path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) + if (!file.exists(path)) + return(NULL) + + # read the profile, and set it if it exists + contents <- readLines(path, warn = FALSE) + if (length(contents) == 0L) + return(NULL) + + # set RENV_PROFILE + profile <- contents[[1L]] + if (!profile %in% c("", "default")) + Sys.setenv(RENV_PROFILE = profile) + + profile + + } + + renv_bootstrap_profile_prefix <- function() { + profile <- renv_bootstrap_profile_get() + if (!is.null(profile)) + return(file.path("profiles", profile, "renv")) + } + + renv_bootstrap_profile_get <- function() { + profile <- Sys.getenv("RENV_PROFILE", unset = "") + renv_bootstrap_profile_normalize(profile) + } + + renv_bootstrap_profile_set <- function(profile) { + profile <- renv_bootstrap_profile_normalize(profile) + if (is.null(profile)) + Sys.unsetenv("RENV_PROFILE") + else + Sys.setenv(RENV_PROFILE = profile) + } + + renv_bootstrap_profile_normalize <- function(profile) { + + if (is.null(profile) || profile %in% c("", "default")) + return(NULL) + + profile + + } + + renv_bootstrap_path_absolute <- function(path) { + + substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( + substr(path, 1L, 1L) %in% c(letters, LETTERS) && + substr(path, 2L, 3L) %in% c(":/", ":\\") + ) + + } + + renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { + renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") + root <- if (renv_bootstrap_path_absolute(renv)) NULL else project + prefix <- if (profile) renv_bootstrap_profile_prefix() + components <- c(root, renv, prefix, ...) + paste(components, collapse = "/") + } + + renv_bootstrap_project_type <- function(path) { + + descpath <- file.path(path, "DESCRIPTION") + if (!file.exists(descpath)) + return("unknown") + + desc <- tryCatch( + read.dcf(descpath, all = TRUE), + error = identity + ) + + if (inherits(desc, "error")) + return("unknown") + + type <- desc$Type + if (!is.null(type)) + return(tolower(type)) + + package <- desc$Package + if (!is.null(package)) + return("package") + + "unknown" + + } + + renv_bootstrap_user_dir <- function() { + dir <- renv_bootstrap_user_dir_impl() + path.expand(chartr("\\", "/", dir)) + } + + renv_bootstrap_user_dir_impl <- function() { + + # use local override if set + override <- getOption("renv.userdir.override") + if (!is.null(override)) + return(override) + + # use R_user_dir if available + tools <- asNamespace("tools") + if (is.function(tools$R_user_dir)) + return(tools$R_user_dir("renv", "cache")) + + # try using our own backfill for older versions of R + envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") + for (envvar in envvars) { + root <- Sys.getenv(envvar, unset = NA) + if (!is.na(root)) + return(file.path(root, "R/renv")) + } + + # use platform-specific default fallbacks + if (Sys.info()[["sysname"]] == "Windows") + file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") + else if (Sys.info()[["sysname"]] == "Darwin") + "~/Library/Caches/org.R-project.R/R/renv" + else + "~/.cache/R/renv" + + } + + renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { + sha <- sha %||% attr(version, "sha", exact = TRUE) + parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) + paste(parts, collapse = "") + } + + renv_bootstrap_exec <- function(project, libpath, version) { + if (!renv_bootstrap_load(project, libpath, version)) + renv_bootstrap_run(version, libpath) + } + + renv_bootstrap_run <- function(version, libpath) { + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + return(renv::load(project = getwd())) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + + } + + renv_json_read <- function(file = NULL, text = NULL) { + + jlerr <- NULL + + # if jsonlite is loaded, use that instead + if ("jsonlite" %in% loadedNamespaces()) { + + json <- catch(renv_json_read_jsonlite(file, text)) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- catch(renv_json_read_default(file, text)) + if (!inherits(json, "error")) + return(json) + + # report an error + if (!is.null(jlerr)) + stop(jlerr) + else + stop(json) + + } + + renv_json_read_jsonlite <- function(file = NULL, text = NULL) { + text <- paste(text %||% read(file), collapse = "\n") + jsonlite::fromJSON(txt = text, simplifyVector = FALSE) + } + + renv_json_read_default <- function(file = NULL, text = NULL) { + + # find strings in the JSON + text <- paste(text %||% read(file), collapse = "\n") + pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' + locs <- gregexpr(pattern, text, perl = TRUE)[[1]] + + # if any are found, replace them with placeholders + replaced <- text + strings <- character() + replacements <- character() + + if (!identical(c(locs), -1L)) { + + # get the string values + starts <- locs + ends <- locs + attr(locs, "match.length") - 1L + strings <- substring(text, starts, ends) + + # only keep those requiring escaping + strings <- grep("[[\\]{}:]", strings, perl = TRUE, value = TRUE) + + # compute replacements + replacements <- sprintf('"\032%i\032"', seq_along(strings)) + + # replace the strings + mapply(function(string, replacement) { + replaced <<- sub(string, replacement, replaced, fixed = TRUE) + }, strings, replacements) + + } + + # transform the JSON into something the R parser understands + transformed <- replaced + transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) + transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) + transformed <- gsub("[]}]", ")", transformed, perl = TRUE) + transformed <- gsub(":", "=", transformed, fixed = TRUE) + text <- paste(transformed, collapse = "\n") + + # parse it + json <- parse(text = text, keep.source = FALSE, srcfile = NULL)[[1L]] + + # construct map between source strings, replaced strings + map <- as.character(parse(text = strings)) + names(map) <- as.character(parse(text = replacements)) + + # convert to list + map <- as.list(map) + + # remap strings in object + remapped <- renv_json_remap(json, map) + + # evaluate + eval(remapped, envir = baseenv()) + + } + + renv_json_remap <- function(json, map) { + + # fix names + if (!is.null(names(json))) { + lhs <- match(names(json), names(map), nomatch = 0L) + rhs <- match(names(map), names(json), nomatch = 0L) + names(json)[rhs] <- map[lhs] + } + + # fix values + if (is.character(json)) + return(map[[json]] %||% json) + + # handle true, false, null + if (is.name(json)) { + text <- as.character(json) + if (text == "true") + return(TRUE) + else if (text == "false") + return(FALSE) + else if (text == "null") + return(NULL) + } + + # recurse + if (is.recursive(json)) { + for (i in seq_along(json)) { + json[i] <- list(renv_json_remap(json[[i]], map)) + } + } + + json + + } + + # load the renv profile, if any + renv_bootstrap_profile_load(project) + + # construct path to library root + root <- renv_bootstrap_library_root(project) + + # construct library prefix for platform + prefix <- renv_bootstrap_platform_prefix() + + # construct full libpath + libpath <- file.path(root, prefix) + + # run bootstrap code + renv_bootstrap_exec(project, libpath, version) + + invisible() + +}) diff --git a/rstudio.png b/rstudio.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff63b84752d159437fbb0629633866b4f7de1da GIT binary patch literal 65231 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 e4?T9ZPWS)NMik-*RM~m}0000