如何绕过 utils::available.packages 中的缓存?

How to bypass caching in utils::available.packages?

我正在维护一个可通过 http 访问的本地网络存储库。大部分包都是从 CRAN 拿来的,但有一个包是我自己写的(称之为 mypkg)。它正在开发中,我会不时发布版本,我想为每个版本自动更新 repo。

我写了一个相当简单的脚本

  1. 通过 http 检查 mypkg 的可用版本(我使用的是 miniCRAN::pkgAvail,但这项工作实际上是由 utils::available.packages 完成的);
  2. 构建最新版本的 mypkg (devtools::build);
  3. 如果它的版本较新,则将其推送到存储库;
  4. 运行 write_PACKAGES
  5. 最后,再次检查mypkg的可用版本,如果版本更新,我们就可以了。

我正在测试脚本,除了最后一步外一切正常。问题是(引用 ?available.packages 的手册页,在我的方括号中插入),

[...] If [the list of packages is] downloaded, the list is cached for the R session in a per-repository file in tempdir() [...]

所以我总是得到旧版本,尽管其余的更新过程很顺利。

我的问题是,如何清除提到的缓存?

似乎不​​是available.packages可以控制的,也许我错了?如果我是对的,您将如何实施第 5 步?也许重新启动会话(我会尝试作为最后的手段)?搜索临时目录并删除它?一定有一些非常简单的东西我没有看到。

我经常使用 install.r and update.r 从本地和远程存储库进行安装。

我通过使用 /tmplittler 驱动两者,所以我有时会强行删除 *.rds —— 即使脚本本身也这样做:

sapply(list.files(path=tempdir(), 
                  pattern="^(repos|libloc).*\.rds$",
                  full.names=TRUE), 
       unlink)

我在这里知道/看到临时目录还有一个额外的好处。