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.dun...@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 ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel