自动化R包的版本增加

 yf_992258 发布于 2023-01-09 13:11

问题

我正在开发一个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制定的,所以归功于他.

1 个回答
  • 如果您使用的是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制定的,所以归功于他.

    2023-01-09 13:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有