我想建立一個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