[R-pkg-devel] R CMD check failure during vignette rebuilding

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Tue Apr 14 18:38:04 CEST 2020

No, I can't tell you whether the behaviour you saw was intentional or 
not, I didn't write it.  But the CRAN policy (which is the motivation 
for many of the checks) says "Packages should not write in the user’s 
home filespace (including clipboards), nor anywhere else on the file 
system apart from the R session’s temporary directory (or during 
installation in the location pointed to by TMPDIR: and such usage should 
be cleaned up)."

Duncan Murdoch

On 14/04/2020 12:22 p.m., Konrad Rudolph wrote:
> Hi Duncan,
> Thanks for the explanation. Using a temporary directory is what I’m
> doing at the moment as a workaround.
> What confused me was that `R CMD check` *already* works inside a new
> directory (a set of different ones, in fact), and it doesn’t seem to
> be documented anywhere that this is the intended behaviour (the
> documentation of `buildVignettes` only mentions it removes “newly
> created … files”, not existing folders), so I thought creating
> temporary files under `vignettes` was fair game. Could you clarify
> whether this behaviour (deleting existing folders during cleanup) is
> intentional? If so, could it be documented more explicitly?“
> On Tue, Apr 14, 2020 at 1:53 PM Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>> On 14/04/2020 6:23 a.m., Konrad Rudolph wrote:
>>> I have a package vignette that reproducibly fails the second time
>>> round in `R CMD check`, in the “checking re-building of vignette
>>> outputs” step.
>>> I have uploaded a small reprex to GitHub [1]. But in a nutshell the
>>> vignette contains a subfolder `foo`, and a file `foo/bar`. And the
>>> `test.rmd` vignette contains the following R code:
>>>> newfile = file.path(getwd(), 'foo', 'baz')
>>>> writeLines('baz', newfile)
>>> This code causes `R CMD check` to delete the folder `foo` inside
>>> `00_pkg_src/vignettes` after building the vignette, leading to the
>>> following error message further down the line:
>>>>     Error(s) in re-building vignettes:
>>>>       ...
>>>>     --- re-building ‘test.rmd’ using rmarkdown
>>>>     Quitting from lines 8-10 (test.rmd)
>>>>     Error: processing vignette 'test.rmd' failed with diagnostics:
>>>>     cannot open the connection
>>>>     --- failed re-building ‘test.rmd’
>>> This seems to be due to the cleanup after building vignettes inside
>>> `tools::buildVignette`, because creating a file inside a folder
>>> changes the directory subfolder modification time (on POSIX-like
>>> systems) so the whole folder is deleted in cleanup, rather than just
>>> the file. Can I prevent this?
>>> [1] https://github.com/klmr/vignettetest
>> Normally the checks don't want you to be writing files outside of the
>> temp dir, because if a user processed your vignette, it might stomp on
>> their files.  So can't you change that code to
>>     dir.create(tempdir(), 'foo')
>>     newfile <- file.path(tempdir(), 'foo', 'baz')
>> Duncan Murdoch
> --
> Konrad Rudolph // @klmr

More information about the R-package-devel mailing list