]> git.donarmstrong.com Git - cran2deb.git/blobdiff - trunk/R/build.R
add option to not cleanup (debug) packages to build. update aliases/hashes from db.
[cran2deb.git] / trunk / R / build.R
index e6b5a13d684ed6144da462d9cefd7dca817c0637..540610f2fda99fb14ffb37f82c954f350bd91641 100644 (file)
@@ -1,5 +1,5 @@
 
-build <- function(name,extra_deps,force=F) {
+build <- function(name,extra_deps,force=F,do_cleanup=T) {
     # can't, and hence don't need to, build base packages
     if (name %in% base_pkgs) {
         return(T)
@@ -20,6 +20,10 @@ build <- function(name,extra_deps,force=F) {
             return(NULL)
         }
 
+        if (name %in% db_blacklist_packages()) {
+            fail('package',name,'is blacklisted. consult database for reason.')
+        }
+
         pkg <- prepare_new_debian(prepare_pkg(dir,name),extra_deps)
         if (pkg$debversion != version) {
             fail('expected Debian version',version,'not equal to actual version',pkg$debversion)
@@ -38,9 +42,27 @@ build <- function(name,extra_deps,force=F) {
             fail('upload failed!')
         }
 
+        # wait for mini-dinstall to get to work
+        upload_success = FALSE
+        for (i in seq(1,12)) {
+            if (file.exists(file.path(dinstall_archive,'testing',paste(pkg$srcname, '_', pkg$version, '.orig.tar.gz', sep='')))) {
+                upload_success = TRUE
+                break
+            }
+            warn(i,'/12: does not exist',file.path(dinstall_archive,'testing',paste(pkg$srcname, '_', pkg$version, '.orig.tar.gz', sep='')))
+
+            Sys.sleep(5)
+        }
+        if (!upload_success) {
+            warn('upload took too long; continuing as normal (some builds may fail temporarily)')
+        }
         return(pkg$debversion)
     })())
-    cleanup(dir)
+    if (do_cleanup) {
+        cleanup(dir)
+    } else {
+        notice('output is in',dir,'. you must clean this up yourself.')
+    }
     if (is.null(result)) {
         # nothing was done so escape asap.
         return(result)
@@ -69,9 +91,10 @@ needs_build <- function(name,version) {
         }
     } else {
         # always rebuild on failure or no record
+        notice('rebuilding',name,': no build record or previous build failed')
         return(T)
     }
-    # see if it has already been built
+    # see if it has already been built *and* successfully uploaded
     srcname <- pkgname_as_debian(name,binary=F)
     debname <- pkgname_as_debian(name,binary=T)
     if (file.exists(changesfile(srcname, version))) {
@@ -79,12 +102,15 @@ needs_build <- function(name,version) {
         return(F)
     }
 
-    # XXX: what about building newer versions of Debian packages?
-    if (debname %in% debian_pkgs) {
-        notice(srcname,' exists in Debian (perhaps a different version)')
-        return(F)
+    if (build$r_version != version_upstream(version)) {
+        notice('rebuilding',name,': new upstream version',build$r_version,'(old) vs',version_upstream(version),'(new)')
+    }
+    if (build$deb_epoch != version_epoch(version)) {
+        notice('rebuilding',name,': new cran2deb epoch',build$deb_epoch,'(old) vs',version_epoch(version),'(new)')
+    }
+    if (build$db_version != db_get_version()) {
+        notice('rebuilding',name,': new db version',build$db_version,'(old) vs',db_get_version(),'(new)')
     }
-
     rm(debname,srcname)
     return(T)
 }