I'm finding myself updating a the version and date of the r-packages that I maintain quite often. Both the version and date exists in DESCRIPTION, packageName-package.Rd and also man/packageName-package.Rd. I've forgotten to update in one file several times. These were originally generated by the package.skeleton command. Is there a similar command/utility script to update the version?
EDIT: Upon closer inspection the automatically generated versions and dates in the Rd files are not needed. The correct date and version still appears in the generated manual. So obviously this leave only one place to update this information.
Paul Hiemstra's idea seemed very useful to me, so I wrote those few lines of codes:
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)
}
This function updates the DESCRIPTION
file using a version numbering system version.major.minor-snapshot
, by default the snapshot and date are updated. For example:
# An R package:
f <- function() "foo"
package.skeleton("Foo","f")
# Update:
upVers("Foo")
# DESCIRPTION now shows version number 1.0.0-1
I'm not aware of such a tool, but you could leverage R functions like gsub
, or external tools like grep
and sed
to program such behavior. This should not be more than a few lines of R.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With