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)
}
- # delete the current archive (XXX: assumes mini-dinstall)
- for (subdir in c('mini-dinstall','unstable')) {
- path = file.path(dinstall_archive,subdir)
- if (file.exists(path)) {
- unlink(path,recursive=T)
- }
- }
# delete notes of upload
file.remove(Sys.glob(file.path(pbuilder_results,'*.upload')))
- # make mini-dinstall generate the skeleton of the archive
- ret = log_system('umask 002;mini-dinstall --batch -c',dinstall_config)
- if (ret != 0) {
- fail('failed to create archive')
- }
-
- # pull in all the R dependencies
notice('R dependencies:',paste(pkg$depends$r,collapse=', '))
- for (dep in pkg$depends$r) {
- if (pkgname_as_debian(dep) %in% debian_pkgs) {
- notice('using Debian package of',dep)
- next
- }
- # otherwise, convert to source package name
- srcdep = pkgname_as_debian(dep,binary=F)
-
- notice('uploading',srcdep)
- ret = log_system('umask 002;dput','-c',shQuote(dput_config),'local'
- ,changesfile(srcdep))
- if (ret != 0) {
- fail('upload of dependency failed! maybe you did not build it first?')
- }
- }
build_debian(pkg)
# upload the package
fail('upload failed!')
}
- # delete the current archive (XXX: assumes mini-dinstall)
- # this is handy for group operation
- for (subdir in c('mini-dinstall','unstable')) {
- path = file.path(dinstall_archive,subdir)
- if (file.exists(path)) {
- unlink(path,recursive=T)
+ # wait for mini-dinstall to get to work
+ upload_success = FALSE
+ for (i in seq(1,60)) {
+ if (file.exists(file.path(dinstall_archive,'testing','source',paste(pkg$srcname, '_', pkg$version, '.orig.tar.gz', sep='')))) {
+ upload_success = TRUE
+ break
}
- }
+ warn(i,'/60: does not exist',file.path(dinstall_archive,which_system,'testing','source',paste(pkg$srcname, '_', pkg$version, '.orig.tar.gz', sep='')))
+ Sys.sleep(1)
+ }
+ if (!upload_success) {
+ warn('upload took too long; continuing as normal (some builds may fail temporarily)')
+ }
return(pkg$debversion)
})())
cleanup(dir)
}
} 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))) {
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)
}