#!/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))] #mirror <- 'http://cran.uk.r-project.org/' 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.2') mirrors <- c(mirrors,BioC='http://www.bioconductor.org/packages/2.7') verbose<-TRUE debug<-FALSE 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) { repos <- c( "bioc" ,"data/annotation" ,"data/experiment" ,"extra" ) for (s in repos) { packages.retrieved <- rbind( packages.retrieved, available.packages(contrib.url(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) 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 (debug) { 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...') db_update_package_versions()