-version_new <- function(rver, debian_revision=1, debian_epoch=db_get_base_epoch(), verbose=FALSE) {
+version_new <- function(rver, pkgname, debian_revision=1, debian_epoch=db_get_base_epoch(), verbose=FALSE) {
if (verbose) {cat("rver:",rver," debian_revision:",debian_revision," debian_epoch:",debian_epoch,"\n")}
# generate a string representation of the Debian version of an
# R version of a package
pkgver = rver
+
+ override.epoch <- db_epoch_override(pkgname=pkgname)
+ debian_epoch <- max(debian_epoch,override.epoch)
+
# ``Writing R extensions'' says that the version consists of at least two
# non-negative integers, separated by . or -
if (!length(grep('^([0-9]+[.-])+[0-9]+$',rver))) {
,'does not obviously translate into a valid Debian version.')
}
- # if rver contains a : then the Debian version must also have a colon
- if (debian_epoch == 0 && length(grep(':',pkgver)))
- debian_epoch = 1
-
# if the epoch is non-zero then include it
- if (debian_epoch != 0)
+ if (debian_epoch != 0 || length(grep(':',pkgver)))
pkgver = paste(debian_epoch,':',pkgver,sep='')
# always add the '-1' Debian release; nothing is lost and rarely will R
version_revision <- function(pkgver) {
# return the Debian revision of a Debian package version
- return(as.integer(sub(paste('.*-([0-9]+',version_suffix,')?([0-9]+)$',sep=''),'\\2',pkgver)))
+ return(as.integer(sub(paste('.*-([0-9]+',gsub('\\+','\\\\+',version_suffix),')?([0-9]+)$',sep=''),'\\2',pkgver)))
}
# version_revision . version_new(x) = id
# version_revision(version_new(x)) = 1
}
# version_upstream . version_new = id
-version_update <- function(rver, prev_pkgver, prev_success, verbose=TRUE) {
+version_update <- function(rver, prev_pkgver, prev_success, pkgname, verbose=TRUE) {
if (verbose) cat("version_update:"," rver:",rver," prev_pkgver:",prev_pkgver," prev_success:",prev_success,"\n")
# return the next debian package version
prev_rver <- version_upstream(prev_pkgver)
if (prev_success) {
inc = 1
}
- return(version_new(rver
+ return(version_new(rver,
+ pkgname=pkgname
,debian_revision = version_revision(prev_pkgver)+inc
,debian_epoch = version_epoch(prev_pkgver)
))
# new release
# TODO: implement Debian ordering over version and then autoincrement
# Debian epoch when upstream version does not increment.
- return(version_new(rver
+ return(version_new(rver,
+ pkgname=pkgname
,debian_epoch = version_epoch(prev_pkgver)
))
}
latest_r_ver <- available[pkgname,'Version']
if (verbose) {cat("latest_r_ver: '",latest_r_ver,"'\n",sep="")}
if (!is.null(db_ver)) {
- return(version_update(latest_r_ver, db_ver, db_succ))
+ return(version_update(latest_r_ver, db_ver, db_succ,pkgname=pkgname))
}
- return(version_new(latest_r_ver))
+ return(version_new(latest_r_ver,pkgname=pkgname))
}