【发布时间】:2014-08-04 06:00:21
【问题描述】:
问题
我正在开发一个 R 包,我想在每次构建它时自动增加版本。我希望它能够将我的结果与包版本相关联。现在我正在使用我自己的 ugly 函数来做到这一点。
我的问题是:有没有办法做得更好?或者,我一般应该避免这样做吗?
另一种选择
我正在考虑的另一个选项是使用“devtools::install_github”安装我的包(托管在 github),然后将我的结果(或添加到绘图)保存在已安装的说明文件中的 GithubSHA1 一起保存。
例如,我可以获取 'devtools' 包的版本和 GithubSHA1:
read.dcf(file=system.file("DESCRIPTION", package="devtools"),
fields=c("Version", "GithubSHA1"))
## Version GithubSHA1
## [1,] "1.5.0.99" "3ae58a2a2232240e67b898f875b8da5e57d1b3a8"
我目前的尝试
我编写了以下函数来生成一个新的说明文件,其中包含更新的版本和日期。 (我不介意增加主版本)
incVer <- function(pkg, folder=".", increase="patch"){
## Read DESCRIPTION from installed package ´pkg´ and make new one on the specified
## ´folder´. Two options for ´increase´ are "patch" and "minor"
f <- read.dcf(file=system.file("DESCRIPTION", package=pkg),
fields=c("Package", "Type", "Title", "Version", "Date",
"Author", "Maintainer", "Description", "License",
"Depends", "Imports", "Suggests"))
curVer <- package_version(f[4])
if(increase == "patch") {
curVer[[1,3]] <- ifelse(is.na(curVer$patchlevel), 1, curVer$patchlevel + 1)
} else if (increase == "minor") {
curVer[[1,2]] <- ifelse(is.na(curVer$minor), 1, curVer$minor + 1)
curVer[[1,3]] <- 0
} else {
stop(paste("Can not identify the increase argument: " , increase))
}
f[4] <- toString(curVer)
## Update also the date
f[5] <- format (Sys.time(), "%Y-%m-%d")
write.dcf(f, file=paste(folder, "DESCRIPTION", sep="/"))
}
【问题讨论】:
-
我没有发现太多丑陋的地方,Roxygen2 包使用了类似的方法。
-
但是roxygen2不处理DESCRIPTION文件,除了collate字段,对吧?
-
我观察到 roxygen2 有时会显着重新格式化我的说明文件,例如它断线等。