我想建立一个pre-commit钩devtools::document
并要失败提交如果devtools::document
改变任何东西。我检查了devtools::document
源,并返回invisible()
所以这是不可能有条件地返回的退出代码。预提交钩devtools ::文件
有什么巧妙的方法来阻止发生时devtools::document
确实工作的承诺?
我想建立一个pre-commit钩devtools::document
并要失败提交如果devtools::document
改变任何东西。我检查了devtools::document
源,并返回invisible()
所以这是不可能有条件地返回的退出代码。预提交钩devtools ::文件
有什么巧妙的方法来阻止发生时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创建运行上面的方法,并返回一个下面的脚本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)
}
做出整理了我的问题 –
'devtools ::文件()'写一条消息到标准输出(通常是控制台),每当它改变一个文件:'写作getScore.Rd' 。也许如果你能发现,你可以用它来工作。 – JAD
有趣,对我来说也打印更新和装载消息(红色),但它们不是由'capture.output'返回。 – JAD
您是否测试过该脚本?我有一种感觉,那是行不通的。 'capture.output'有两种类型的输出,用'message'你只抓取两个默认的消息(更新和加载)。消息'writing file.Rd'实际上不是消息,而是输出。 **所以你现在不抓住这些权利。**你应该改变类型'TYPE =“输出”',然后测试'长度(线)> 0'。 – JAD