[R-pkg-devel] nit-picking about CRAN repository policy
On 07/05/2022 7:30 p.m., Ben Bolker wrote:
On 2022-05-07 7:17 p.m., Duncan Murdoch wrote:
On 07/05/2022 6:43 p.m., Ben Bolker wrote:
??? Folks, ??? CRAN has recently set up an auxiliary 'noSuggests' test platform that tests that packages are using suggested packages conditionally, as recommended in Writing R Extensions, and as (sort of) specified in the CRAN repository policy. ??? Specifically, the CRP (revision 5236) says: ? > A package listed in ?Suggests? or ?Enhances? should be used conditionally in examples or tests if it cannot straightforwardly be installed on the major R platforms. (?Writing R Extensions? recommends that they are always used conditionally.) ??? One of my packages failed on the 'noSuggest' test platform <https://www.stats.ox.ac.uk/pub/bdr/noSuggests/bbmle.out> because two suggested packages were used unconditionally in the vignette. There are two reasons (IMO) that this should *not* have triggered a threat of archiving: ??? (1) the unconditional package use was in a vignette, not in examples or tests ??? (2) the relevant packages (AICcmodavg and MuMIn) are available on CRAN and install easily on Linux/Windows/MacOS (they are R-only, no compiled code or extra requirements, binaries are available on CRAN). ???? Is it worth suggesting to CRAN maintainers that either they refine their 'noSuggests' test so that it conforms to the wording in the CRP, or that they change the CRP wording to something stricter like ? > Any package listed in ?Suggests? or ?Enhances? should be used conditionally in examples, tests, and vignettes.
I wouldn't think it's worth the time, but you could submit a suggested
patch to them if you feel like it.
Personally I'd take a more extreme position than theirs:? your package
should check without errors if any subset of the Suggests packages is
installed.? This isn't practical to test, but "all" and "none" is at
least something.
With vignette formats based on knitr, it's very easy to implement this.
?Just add a code chunk at the beginning with code like this:
? if (!requireNamespace("sug1") ||
????? !requireNamespace("sug2")) {
??? warning(call. = FALSE, "This vignette requires sug1 and sug2 to be
installed")
??? knitr::knit_exit()
? }
I don't know if other vignette engines make it so easy to bail out, but
they should.
Duncan Murdoch
Thanks.
Fixing the problems isn't difficult or unreasonable (I will do it in
a more subtle way, running chunks of code conditionally). I'm just
feeling a little bit grumpy/defensive because:
* CRAN asked me to submit a patched version before May 7
* I submitted a patched version to CRAN at 7:30 PM local time on May 6
(which is admittedly May 7 in UK/European time)
* I woke up to an e-mail from CRAN to me and 50 downstream package
maintainers saying that my package was scheduled for archiving, and a
concerned message from a downstream package maintainer ...
As far as I know, the folks at CRAN are *always* grumpy. Duncan