我发现自己正在更新我经常维护的 r-packages 的版本和日期。版本和日期都存在于DESCRIPTION、packageName-package.Rd 和man/packageName-package.Rd 中。我忘记在一个文件中更新好几次了。这些最初是由 package.skeleton 命令生成的。是否有类似的命令/实用程序脚本来更新版本?
编辑:仔细检查后,不需要 Rd 文件中自动生成的版本和日期。正确的日期和版本仍然出现在生成的手册中。所以很明显,这只留下一个地方来更新这些信息。
我发现自己正在更新我经常维护的 r-packages 的版本和日期。版本和日期都存在于DESCRIPTION、packageName-package.Rd 和man/packageName-package.Rd 中。我忘记在一个文件中更新好几次了。这些最初是由 package.skeleton 命令生成的。是否有类似的命令/实用程序脚本来更新版本?
编辑:仔细检查后,不需要 Rd 文件中自动生成的版本和日期。正确的日期和版本仍然出现在生成的手册中。所以很明显,这只留下一个地方来更新这些信息。
Paul Hiemstra 的想法对我来说似乎很有用,所以我写了那几行代码:
upVers <- function(path,update="snapshot",date=TRUE,simplify=TRUE)
{
# This function updates the description file from package
# in path (assumed work directory by default, as typical
# with projects in RStudio using GitHub).
# Usage:
# path: path to contents of a package
# update: What to update? "version", "major", "minor", "snapshot"
# date: Update date as well?
# simplfy: omit trailing zeros?
# Assumes following numbering system:
# version.major.minor-snapshot
uplist <- c("version","major","minor","snapshot")
if (missing(path)) path <- getwd()
DESCfile <- paste0(path,"/DESCRIPTION")
if (!file.exists(DESCfile)) stop("DESCRIPTION does not exist. Is this the folder of a package?")
DESC <- readLines(DESCfile)
### Update date:
if (date)
{
DESC <- gsub("(?<=Date: )\\d{4}-\\d{2}-\\d{2}",Sys.Date(),DESC,perl=TRUE)
}
### Update version:
Vers <- regmatches(DESC,regexpr("(?<=Version: )\\d+\\.?\\d*\\.?\\d*\\-?\\d*",DESC,perl=TRUE))
Vers <- as.numeric(unlist(strsplit(Vers,split="\\.|\\-")))
Vers <- c(Vers,rep(0,length=4-length(Vers)))
Vers[grep(update,uplist,ignore.case=TRUE)] <- Vers[grep(update,uplist,ignore.case=TRUE)] + 1
Vers[1:4>grep(update,uplist,ignore.case=TRUE)] <- 0
# Combine and replace:
Vers <- paste(paste(Vers[1:3],collapse="."),Vers[4],sep="-")
if (simplify)
{
Vers <- gsub("\\.?0?\\.?0?\\-?0?$","",Vers)
}
DESC <- gsub("(?<=Version: )\\d+\\.?\\d*\\.?\\d*\\-?\\d*",Vers,DESC,perl=TRUE)
# Write Description:
writeLines(DESC,DESCfile)
}
此函数DESCRIPTION
使用版本编号系统更新文件version.major.minor-snapshot
,默认情况下更新快照和日期。例如:
# An R package:
f <- function() "foo"
package.skeleton("Foo","f")
# Update:
upVers("Foo")
# DESCIRPTION now shows version number 1.0.0-1
我不知道有这样的工具,但您可以利用 R 函数(如gsub
)或外部工具(如grep
and sed
)来编程此类行为。这不应该超过几行 R。