gpt4 book ai didi

r - 自动增加R软件包的版本

转载 作者:行者123 更新时间:2023-12-03 10:42:04 25 4
gpt4 key购买 nike

问题

我正在开发R软件包,并且每次构建时都希望自动增加版本。我希望能够将我的结果与软件包版本相关联。现在,我正在使用自己的丑陋函数来执行此操作。

我的问题是:有没有更好的方法?或者,我应该避免这样做吗?

另一个选项

我想到的另一个选择是使用“devtools::install_github”安装我的程序包(托管在github中),然后将其结果保存(或添加到绘图中)GithubSHA1,该文件保存在已安装的Description文件中。

例如,我可以像“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="/"))
}

最佳答案

如果使用的是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,我们在release标记之后立即创建 -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"`'/' > $@

这非常方便,除了添加release标签和 -pre标签。

顺便说一句。这主要是由我的 friend 和图形共同开发者TamásNepusz解决的,因此功劳是他的。

关于r - 自动增加R软件包的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com