devtools::document 的预提交挂钩

Pre-commit hook for devtools::document

我想为 devtools::document 设置一个预提交挂钩,并希望在 devtools::document 更改任何内容时使提交失败。我检查了 devtools::document 来源,它 returns invisible() 所以不可能有条件地 return 退出代码。

devtools::document 有效时,是否有任何巧妙的方法来阻止提交的发生?

使用函数 capture.output 我们可以捕获 devtools::documents 每当它更改文件时发送的消息:

Writing getScore.Rd

所以当我们 运行:

results <- capture.output(devtools::document())

更新文档时(在本例中,我删除了一个 .Rd 文件,结果如下所示:

> results
[1] "Writing getScore.Rd"

如果什么都不写,results为空:

> results
character(0)

我认为从这里继续下去很容易:)

OP,@BobJansen 创建了以下脚本 运行 上面的方法和 returns status = 0 如果没有文件被编辑, status = 100 如果任何地方:

#!/usr/bin/Rscript

source("packrat/init.R")

lines <- capture.output(devtools::document(), type = 'output')
if (length(lines) > 0) {
  print(lines)
  q(save = 'no', status = 100)
} else {
  q(save = 'no', status = 0)
}

roxygen2::roxygenize() 有一个 hook,由开箱即用的 {precommit} 包提供。

披露:我是维护者。