]> git.donarmstrong.com Git - cran2deb.git/blobdiff - trunk/R/version.R
fix the version to use epochs properly
[cran2deb.git] / trunk / R / version.R
index 0dffa19830cae724b9779a8b4787a37936815bb1..27c2e6679a9668f77d21eac8b4773175abbd0657 100644 (file)
@@ -1,12 +1,17 @@
-version_new <- function(rver,debian_revision=1, debian_epoch=db_get_base_epoch()) {
+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))) {
-        fail('Not a valid R package version',rver)
+        fail(paste("Not a valid R package version: '",rver,"'",sep=""))
     }
 
     # Debian policy says that an upstream version should start with a digit and
@@ -16,17 +21,13 @@ version_new <- function(rver,debian_revision=1, debian_epoch=db_get_base_epoch()
                   ,'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
     # packages be Debian packages without modification.
-    return(paste(pkgver,'-',debian_revision,version_suffix,version_suffix_step,sep=''))
+    return(paste(pkgver,'-',version_suffix_step,version_suffix,debian_revision,sep=''))
 }
 
 version_epoch <- function(pkgver) {
@@ -40,18 +41,20 @@ version_epoch <- function(pkgver) {
 
 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=''),'\\1',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 <- function(pkgver) {
+version_upstream <- function(pkgver, verbose=FALSE) {
+    if (verbose) {cat("version_upstream:"," pkgver:",pkgver,"\n")}
     # return the upstream version of a Debian package version
     return(sub('-[a-zA-Z0-9+.~]+$','',sub('^[0-9]+:','',pkgver)))
 }
 # version_upstream . version_new = id
 
-version_update <- function(rver, prev_pkgver, prev_success) {
+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_rver == rver) {
@@ -60,7 +63,8 @@ version_update <- function(rver, prev_pkgver, prev_success) {
         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)
                           ))
@@ -68,25 +72,26 @@ version_update <- function(rver, prev_pkgver, prev_success) {
     # 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)
                       ))
 }
 
-new_build_version <- function(pkgname) {
+new_build_version <- function(pkgname, verbose=FALSE) {
+    cat("new_build_version: "," pkgname:",pkgname,"\n")
     if (!(pkgname %in% rownames(available))) {
-        bundle <- r_bundle_of(pkgname)
-        if (is.null(bundle)) {
-            fail('tried to discover new version of',pkgname,'but it does not appear to be available')
-        }
-        name <- bundle
+        fail('tried to discover new version of',pkgname,'but it does not appear to be available')
     }
     db_ver <- db_latest_build_version(pkgname)
+    if (verbose) {cat("db_ver: '",db_ver,"'\n",sep="")}
     db_succ <- db_latest_build_status(pkgname)[[1]]
+    if (verbose) {cat("db_succ: '",db_succ,"'\n",sep="")}
     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))
 }