自动化R包的版本增加

alk*_*989 25 r package

问题

我正在开发一个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"
Run Code Online (Sandbox Code Playgroud)

到目前为止我的尝试

我编写了以下函数来生成一个新的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="/"))
}
Run Code Online (Sandbox Code Playgroud)

Gab*_*rdi 20

如果您使用的是git,则可以使用git标签创建版本字符串.这是我们生成igraph库的版本字符串的方法:

git describe HEAD --tags | rev | sed 's/g-/./' | sed 's/-/+/' | rev
Run Code Online (Sandbox Code Playgroud)

它给你一个这样的格式:

0.8.0-pre+131.ca78343
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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"`'/' > $@
Run Code Online (Sandbox Code Playgroud)

这非常方便,除了添加发布标签和-pre标签之外,您无需执行任何操作.

顺便说一句.这主要是由我的朋友和igraph联合开发人员TamásNepusz制定的,所以归功于他.