问题
我正在开发一个R包,我希望每次构建它时都会自动增加它.我希望能够将我的结果与包版本相关联.现在我用自己的丑陋功能来做到这一点.
我的问题是:有没有办法做得更好?或者,我应该避免这样做吗?
另外一个选项
我想到的另一个选择是使用'devtools :: install_github'安装我的包(托管在github中),然后保存我的结果(或添加到图中)保存在已安装的DESCRIPTION文件中的GithubSHA1.
例如,我可以获得'devtools'包的版本和GithubSHA1:
read.dcf(file=system.file("DESCRIPTION", package="devtools"), fields=c("Version", "GithubSHA1")) ## Version GithubSHA1 ## [1,] "1.5.0.99" "3ae58a2a2232240e67b898f875b8da5e57d1b3a8"
到目前为止我的尝试
我编写了以下函数来生成一个新的DESCRIPTION文件,其中包含更新的版本和日期.(增加主要版本是我不介意每手增加的东西)
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="/"))
}
Gabor Csardi.. 20
如果您使用的是git,则可以使用git标签创建版本字符串.这是我们生成igraph
库的版本字符串的方法:
git describe HEAD --tags | rev | sed 's/g-/./' | sed 's/-/+/' | rev
它给你一个这样的格式:
0.8.0-pre+131.ca78343
0.8.0-pre
是当前分支上的最后一个标记.(最后发布的版本是0.7.1,我们-pre
在发布标记之后立即创建一个标记.)131
是自上一个标记以来的提交数.ca78343
是最后一次提交的十六进制id的前七个字符.
这将是很好的,除了你不能在R包中有这样的版本字符串,R不允许它.因此,对于R,我们使用以下脚本转换此版本字符串:https://github.com/igraph/igraph/blob/develop/interfaces/R/tools/convertversion.sh
本质上,它创建的版本号比上一版本大,小于下一版本(-pre
标签中的版本号).从0.8.0-pre+131.ca78343
它创造
0.7.999-131
131
自上次发布以来提交的数量在哪里.
我把DESCRIPTION
文件的生成放在Makefile中.这将替换日期和版本号:
VERSION=$(shell ./tools/convertversion.sh) igraph/DESCRIPTION: src/DESCRIPTION version_number sed 's/^Version: .*$$/Version: '$(VERSION)'/' $< | \ sed 's/^Date: .*$$/Date: '`date "+%Y-%m-%d"`'/' > $@
这非常方便,除了添加发布标签和-pre
标签之外,您无需执行任何操作.
顺便说一句.这主要是由我的朋友和igraph联合开发人员TamásNepusz制定的,所以归功于他.
如果您使用的是git,则可以使用git标签创建版本字符串.这是我们生成igraph
库的版本字符串的方法:
git describe HEAD --tags | rev | sed 's/g-/./' | sed 's/-/+/' | rev
它给你一个这样的格式:
0.8.0-pre+131.ca78343
0.8.0-pre
是当前分支上的最后一个标记.(最后发布的版本是0.7.1,我们-pre
在发布标记之后立即创建一个标记.)131
是自上一个标记以来的提交数.ca78343
是最后一次提交的十六进制id的前七个字符.
这将是很好的,除了你不能在R包中有这样的版本字符串,R不允许它.因此,对于R,我们使用以下脚本转换此版本字符串:https://github.com/igraph/igraph/blob/develop/interfaces/R/tools/convertversion.sh
本质上,它创建的版本号比上一版本大,小于下一版本(-pre
标签中的版本号).从0.8.0-pre+131.ca78343
它创造
0.7.999-131
131
自上次发布以来提交的数量在哪里.
我把DESCRIPTION
文件的生成放在Makefile中.这将替换日期和版本号:
VERSION=$(shell ./tools/convertversion.sh) igraph/DESCRIPTION: src/DESCRIPTION version_number sed 's/^Version: .*$$/Version: '$(VERSION)'/' $< | \ sed 's/^Date: .*$$/Date: '`date "+%Y-%m-%d"`'/' > $@
这非常方便,除了添加发布标签和-pre
标签之外,您无需执行任何操作.
顺便说一句.这主要是由我的朋友和igraph联合开发人员TamásNepusz制定的,所以归功于他.