R/install.all.packages.R

Defines functions listdeb installdeb installalldeb compare.packages install.all.packages

# TODO: Add comment
# 
# Author: jeroen
###############################################################################

# sudo apt-get install openjdk-6-jdk


listdeb <- function(){ 
	#the system command to find r-cran-packages
	listpackages <- "apt-cache search r-cran* | grep r-cran-[a-zA-Z0-9.]*"
	
	#run it
	allpackages <- system(listpackages, intern=T);
	
	#ubuntu package has different name that CRAN package:
	customname <- grepl("--", allpackages);
	debnames1 <- sapply(strsplit(allpackages[customname], ' '), head, 1)
	crannames1 <- sapply(strsplit(allpackages[customname], '-- '), tail, 1)
	
	#ubuntu package has same name as CRAN package:
	debnames2 <- sapply(strsplit(allpackages[!customname], ' '), head, 1);
	crannames2 <- sapply(strsplit(debnames2, '-'), "[[", 3);
	
	debnames <- c(debnames1, debnames2);
	crannames <- c(crannames1, crannames2);
	return(data.frame(debname=debnames, cranname=crannames));
}

installdeb <- function(packagename){
	installcmd <- paste("sudo apt-get -y install", packagename);
	out <- system(installcmd, intern=F);
	return(as.numeric(out));
}

installalldeb <- function(){
	
	packagelist <- listdeb();
	if(nrow(packagelist)==0) return(packagelist);
	
	packagelist$success <- NA;
	for(i in 1:nrow(packagelist)){
		packagelist[i, "success"] <- installdeb(packagelist[i,"debname"])
	}	
	return(packagelist);
}

compare.packages <- function(){
	options(repos="http://cran.cnr.berkeley.edu/");
	
	installed <- installed.packages();
	available <- available.packages();
	
	wehaveit <- rownames(available) %in% rownames(installed);
	output <- data.frame(package=rownames(available), installed=wehaveit, latest=FALSE, row.names=rownames(available));
	
	cranpackages <- rownames(installed)[rownames(installed) %in% rownames(available)];	
	output[cranpackages, "latest"] <- installed[cranpackages, "Version"] == available[cranpackages,"Version"]; 
	
	return(output);
}

install.all.packages <- function(){
	options(repos="http://cran.cnr.berkeley.edu/");
	options(warn=2); #converts warnings to errors.
	
	report <- installalldeb();
	skiplist <- report$cranname;
	
	allpackages <- compare.packages();
	packagenames <- rownames(allpackages);
	
	allpackages$success <- NA;
	allpackages$info <- NA:

	for(thisname in packagenames){
		message("PACKAGE: ", thisname);	
		if(thisname %in% skiplist){
			allpackages[thisname, "success"] <- TRUE;
			allpackages[thisname, "info"] <- "skipped (debian)";
			cat("Skipping", thisname, " because it is a Debian package.\n\n");
			next;
		}
		
		if(allpackages[thisname, "latest"] == TRUE){
			allpackages[thisname, "success"] <- TRUE;
			allpackages[thisname, "info"] <- "skipped (uptodate)";
			cat("Skipping", thisname, " because it has the most recent version.\n\n");
			next;
		}
		
		mytry <- try(install.packages(thisname));
		if(class(mytry) == "try-error"){
			allpackages[thisname, "success"] <- FALSE;
			allpackages[thisname, "info"] <- unclass(mytry);			
		} else {
			allpackages[thisname, "success"] <- TRUE;
			allpackages[thisname, "info"] <- "INSTALLED";				
		}		
	}	
	options(warn=0); 
	return(allpackages);
}
jeroenooms/opencpu.tools documentation built on May 19, 2019, 6:16 a.m.