Sorry for a slow reply I posted on the support site. Martin
On 10/31/2016 02:45 PM, Kevin Ushey wrote:
(Sorry about cross-posting, but I didn't receive a response at
https://support.bioconductor.org/p/88777/)
---
BiocInstaller incorrectly detects https support if loaded within a
'suppressMessages()' context, and that failure leads to a namespace
load failure on versions of R without libcurl support. To reproduce,
try running the following on a version of R without libcurl (e.g. the
Snow Leopard build of R 3.2.1):
suppressMessages(library(BiocInstaller))
Error : .onLoad failed in loadNamespace() for 'BiocInstaller', details:
call: url(paste0(.protocol(), "//bioconductor.org/BiocInstaller.dcf"))
error: https:// URLs are not supported
Error: package or namespace load failed for ‘BiocInstaller’
The issue seems to come from the implementation of
'BiocInstaller:::.protocol', which attempts to ascertain whether
`https://` or `http://` should be used. The implementation has:
con <- file(fl <- tempfile(), "a")
on.exit(close(con))
sink(con, type = "message")
tryCatch({
fcon <- file("https://bioconductor.org/index.html")
on.exit(close(fcon), add = TRUE)
readLines(fcon, 1L)
}, error = function(e) {
message(conditionMessage(e))
})
sink(type = "message")
flush(con)
useHTTPS <- length(readLines(fl)) == 0L
PROTOCOL <<- if (useHTTPS)
"https:"
else "http:"
And that attempt to populate a message sink fails when executed within
a suppressMessages() context.
Although the above example is artificial, most other examples may not
be -- it's easy to imagine that the BiocInstaller namespace might be
implicitly loaded deep within the bowels of some code; for example,
'packrat::snapshot()' may query 'BiocInstaller::biocinstallRepos()',
and a user calling 'packrat::snapshot()' wrapped in
'suppressMessages()' will then see the BiocInstaller load error.
Is there any chance the implementation here could be modified to
instead just set up a local `withCallingHandlers` check, to ensure
that a parent `withCallingHandlers` usage doesn't interefere? Or
something similar?
Thanks,
Kevin
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel
This email message may contain legally privileged and/or...{{dropped:2}}
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel