]> git.donarmstrong.com Git - cran2deb.git/blobdiff - trunk/exec/update_cache
Fixes to BASH version of exec/update,
[cran2deb.git] / trunk / exec / update_cache
index 689384670f01d01b9ce20ae4e1909bc1ca0194c2..b47921be8c3d0561de67a57c2e23a06852de4319 100755 (executable)
@@ -1,32 +1,87 @@
-#!/usr/bin/env Rscript
+#!/usr/bin/r -t
+
+# Note: everything in the case needs to be system-independent!
 library(cran2deb)
 library(ctv)
 
-argv <- commandArgs()
-argv <- argv[-(1:match("--args", argv))]
+#argv <- commandArgs()
+#argv <- argv[-(1:match("--args", argv))]
 
 #mirror <- 'http://cran.uk.r-project.org/'
-mirror <- 'http://cran.r-project.org/'
 
-message('updating list of available R packages...')
-available <- available.packages(contrib.url(mirror))
+available <- NULL
+ctv.available <- NULL
+
+mirrors <- NULL
+mirrors <- c(mirrors,CRAN='http://cran.r-project.org')
+#mirrors <- c(mirrors,BioC='http://www.bioconductor.org/packages/2.7')
+
+verbose<-TRUE
+
+for (mirror.name in names(mirrors)) {
+       mirror.url<-mirrors[mirror.name]
+       message(paste("Updating list of available R packages from ",mirror.name," [",mirror.url,"].\n",sep=""))
+       packages.retrieved <- NULL
+       if ("CRAN" == mirror.name) {
+               packages.retrieved <- available.packages(contrib.url(mirror.url))
+       } else if ("BioC" == mirror.name) {
+               for (s in c('bioc')) {
+                       packages.retrieved <- rbind(packages.retrieved,contrib.url(available.packages(paste(mirror.url,s,sep="/"))))
+               }
+       } else {
+               packages.retrieved <- available.packages(mirror.url)
+       }
+       if (verbose) message(paste("Retrieved ",nrow(packages.retrieved)," package descriptions.\n",sep=""))
+       available <- rbind(available, packages.retrieved)
+       message('updating list of available R task views...')
+       ctv.available <- rbind(ctv.available,available.views(repo=mirror.url))
+}
 
 #available <- rbind(available,available.packages(contrib.url('http://www.bioconductor.org/')))
-#dupes <- duplicated(rownames(available), fromLast=T)
-#available <- available[!dupes,]
 
-message('updating list of available R task views...')
-ctv.available <- available.views(repo=mirror)
+dupes <- duplicated(rownames(available), fromLast=T)
+if (sum(dupes)>0) {
+       if (verbose) cat("Found ",sum(dupes)," packages with the same name in different distributions. Those are now removed.\n",sep="")
+       available <- available[!dupes,,drop=F]
+} else {
+       if (length(mirrors)>1) cat("All packages have different names.")
+}
 
+# TODO: Check if not better a dedicated tool should be called for this
 message('updating list of base R packages...')
 base_pkgs <- readLines(pipe(paste('sudo pbuilder --execute --override-config --configfile'
                                  ,shQuote(pbuilder_config),'-- /usr/bin/R --vanilla 2>&1 >/dev/null <'
                                  ,shQuote(file.path(root,'exec/get_base_pkgs'))
                                  ,'| grep -v ^W:')))
 
+if (any(grep("^E:",base_pkgs,value=FALSE))) {
+       cat("Cannot continue, the following error occurred:\n")
+       cat(paste(grep("^E:",base_pkgs,value=TRUE),collapse="\n"))
+       cat("\n")
+       q(save="no")
+}
+
+
+if (verbose) {
+       cat("The following base packages were determined:\n")
+       print(base_pkgs)
+}
+
 message('updating list of existing Debian packages...')
 debian_pkgs <- readLines(pipe('apt-cache rdepends r-base-core | sed -e "/^  r-cran/{s/^[[:space:]]*r/r/;p}" -e d | sort -u'))
 
+if (any(grep("^E:",debian_pkgs,value=FALSE))) {
+       cat("Cannot continue, the following error occurred:\n")
+       cat(paste(grep("^E:",debian_pkgs,value=TRUE),collapse="\n"))
+       cat("\n")
+       q(save="no")
+}
+
+if (verbose) {
+       cat("The following packages were found to be available:\n")
+       print(debian_pkgs)
+}
+
 save(debian_pkgs, base_pkgs, available, ctv.available, file=file.path(cache_root,'cache.rda'),eval.promises=T)
 
 message('synchronising database...')