[R-pkg-devel] Order of repo access from options("repos")
Greg Hunt
greg @end|ng |rom ||rm@n@y@h@com
Sun Mar 31 12:55:16 CEST 2024
When I set multiple repositories in options(repos=...) the order of access
is providing me with some surprises as I work through some CICD issues:
Given:
options(
repos = c(
CRAN = "http://localhost:3001/proxy",
C = "http://172.17.0.1:3002",
B = "http://172.17.0.1:3001/proxy",
A = "http://localhost:3002"
)
)
the order in the build log after this is :
#12 178.7 Warning: unable to access index for repository
http://localhost:3001/proxy/src/contrib:
#12 178.7 cannot open URL '
http://localhost:3001/proxy/src/contrib/PACKAGES'
#12 178.7 Warning: unable to access index for repository
http://172.17.0.1:3002/src/contrib:
#12 178.7 cannot open URL 'http://172.17.0.1:3002/src/contrib/PACKAGES'
#12 178.9 Warning: unable to access index for repository
http://localhost:3002/src/contrib:
#12 178.9 cannot open URL 'http://localhost:3002/src/contrib/PACKAGES'
#12 179.0 trying URL '
http://172.17.0.1:3001/proxy/src/contrib/png_0.1-8.tar.gz'
#12 179.1 Content type 'application/x-gzip' length 24880 bytes (24 KB)
Which indicates that the order is:
CRAN, C, A, B...
note that A comes before B in the URL accesses when I was expecting either
CRAN, C, B, A if its is physical order, or alphabetically would be A, B, C,
CRAN.
As an alternative, given:
options(
repos = c(
C = "http://172.17.0.1:3002",
B = "http://172.17.0.1:3001/proxy",
A = "http://localhost:3002",
CRAN = "http://localhost:3001/proxy"
)
)
The order is:
#12 0.485 Warning: unable to access index for repository
http://172.17.0.1:3002/src/contrib:
#12 0.485 cannot open URL 'http://172.17.0.1:3002/src/contrib/PACKAGES'
#12 1.153 Warning: unable to access index for repository
http://localhost:3002/src/contrib:
#12 1.153 cannot open URL 'http://localhost:3002/src/contrib/PACKAGES'
#12 1.153 Warning: unable to access index for repository
http://localhost:3001/proxy/src/contrib:
#12 1.153 cannot open URL '
http://localhost:3001/proxy/src/contrib/PACKAGES'
#12 1.250 trying URL '
http://172.17.0.1:3001/proxy/src/contrib/rlang_1.1.3.tar.gz'
Which seems to be C, A, CRAN, B.
What is it about B?
The help doesn't talk about this. It says:
repos:
character vector of repository URLs for use by available.packages and
related functions. Initially set from entries marked as default in the
‘repositories’ file, whose path is configurable via environment variable
R_REPOSITORIES (set this to NULL to skip initialization at startup). The
‘factory-fresh’ setting from the file in R.home("etc") is c(CRAN="@CRAN@"),
a value that causes some utilities to prompt for a CRAN mirror. To avoid
this do set the CRAN mirror, by something like
local({
r <- getOption("repos")
r["CRAN"] <- "https://my.local.cran"
options(repos = r)
})
in your ‘.Rprofile’, or use a personal ‘repositories’ file.
Note that you can add more repositories (Bioconductor, R-Forge, RForge.net,
...) for the current session using setRepositories.
Now I am not setting the values in exactly the way that the manual says, so
I experimented in case something was wrong there:
options('repos')$repos
CRAN
"https://cloud.r-project.org"
> local({+ r <- getOption("repos")+ r["CRAN"] <- "https://my.local.cran"+ options(repos = r)+ })> options('repos')$repos
CRAN
"https://my.local.cran"
> str(options('repos'))List of 1
$ repos: Named chr "https://my.local.cran"
..- attr(*, "names")= chr "CRAN"> local({+ r <-
getOption("repos")+ r["CRAN"] <- "https://my.local.cran"+
options(repos = r)+ })> options(+ repos = c(+ C =
"http://172.17.0.1:3002",+ B =
"http://172.17.0.1:3001/proxy",+ A = "http://localhost:3002",+
CRAN = "http://localhost:3001/proxy"+ )+ )>
options('repos')$repos
C B
A CRAN
"http://172.17.0.1:3002" "http://172.17.0.1:3001/proxy"
"http://localhost:3002" "http://localhost:3001/proxy"
> str(options('repos'))List of 1
$ repos: Named chr [1:4] "http://172.17.0.1:3002"
"http://172.17.0.1:3001/proxy" "http://localhost:3002"
"http://localhost:3001/proxy"
..- attr(*, "names")= chr [1:4] "C" "B" "A" "CRAN"> local({+ r
<- getOption("repos")+ r["CRAN"] <- "https://my.local.cran"+
r["C"] = "http://172.17.0.1:3002"+ r["B"] =
"http://172.17.0.1:3001/proxy"+ r["A"] = "http://localhost:3002"+
r["CRAN"] = "http://localhost:3001/proxy"+ options(repos = r)+
})> > str(options('repos'))List of 1
$ repos: Named chr [1:4] "http://172.17.0.1:3002"
"http://172.17.0.1:3001/proxy" "http://localhost:3002"
"http://localhost:3001/proxy"
..- attr(*, "names")= chr [1:4] "C" "B" "A" "CRAN"> options('repos')$repos
C B
A CRAN
"http://172.17.0.1:3002" "http://172.17.0.1:3001/proxy"
"http://localhost:3002" "http://localhost:3001/proxy"
So I don't think I am doing anything obviously accidentally weird there.
The RStudio documentation talks about this issue directly, but I'm
scripting R not RStudio and the behaviour appears to be different anyway.
What is the expected behaviour when there are multiple repositories? Is
there a deterministic ordering? Do the names have an effect?
Greg
[[alternative HTML version deleted]]
More information about the R-package-devel
mailing list