X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=trunk%2Fexec%2Fupdate_cache;h=993a849766d3e66fb300b8cda012cb8772fb1d68;hb=29daf8e084acf67d24eb74e856cdabf7778e786e;hp=0f3632da860df004fe70611abf9f1de3bd596869;hpb=cba40064eef115e4aec5b1d089963d402a6b0965;p=cran2deb.git diff --git a/trunk/exec/update_cache b/trunk/exec/update_cache index 0f3632d..993a849 100755 --- a/trunk/exec/update_cache +++ b/trunk/exec/update_cache @@ -1,33 +1,118 @@ -#!/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.13') +mirrors <- c(mirrors,Omegahat="http://www.omegahat.org/R/src/contrib") + +verbose<-TRUE +debug<-FALSE +package.filters <- c("OS_type","duplicates") + +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),filters=package.filters) + print(packages.retrieved[grep("SNP",rownames(packages.retrieved)),]) + } 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="/")),filters=package.filters) + ) + } + } else { + packages.retrieved <- available.packages(mirror.url,filters=package.filters) + } + 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="") + print(available[dupes,]) + } + + 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:'))) +base_pkgs <- c("base", + "compiler", + "datasets", + "graphics", + "grDevices", + "grid", + "methods", + "parallel", + "splines", + "stats", + "stats4", + "tcltk", + "tools", + "utils") +# 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...')