Проблема
Я разрабатываю пакет R, и я хочу автоматически увеличивать версию каждый раз, когда я ее создаю. Я хочу, чтобы это могло связывать мои результаты с пакетами. На данный момент я использовал свою собственную уродливую функцию для этого.
Мой вопрос: есть ли способ сделать это лучше? Или я должен избегать этого вообще?
Другой вариант
Еще один вариант, о котором я думал, - установить мой пакет (размещенный в github) с помощью "devtools:: install_github", а затем сохранить мои результаты (или добавить к графикам) GithubSHA1, который сохраняется в установленном файле DESCRIPTION.
Например, я могу получить версию и GithubSHA1, как это для пакета'devtools ':
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="/"))
}