Title: Convert CRAN packages into Debian packages
Author: Charles Blundell <blundellc@gmail.com>, with assistance from Dirk Eddelbuettel <>
Maintainer: Charles Blundell <blundellc@gmail.com>
-Depends: ctv, utils, RSQLite, DBI
-SystemRequirements: rc, pbuilder, debian toolchain, web server, mini-dinstall
+Depends: ctv, utils, RSQLite, DBI, digest
+SystemRequirements: littler, rc, pbuilder, debian toolchain, web server, mini-dinstall
Description: Convert CRAN packages into Debian packages, mostly unassisted, easily
subverting the R package system.
License: GPL-3
}
if (!dbExistsTable(con,'license_override')) {
dbGetQuery(con,paste('CREATE TABLE license_override ('
- ,' name TEXT UNIQUE NOT NULL'
- ,',file_sha1 TEXT UNIQUE'
+ ,' name TEXT PRIMARY KEY NOT NULL'
,',accept INT NOT NULL'
,')'))
}
+ if (!dbExistsTable(con,'license_files')) {
+ dbGetQuery(con,paste('CREATE TABLE license_files ('
+ ,' name TEXT NOT NULL'
+ ,',file_sha1 TEXT PRIMARY KEY NOT NULL'
+ ,')'))
+ }
return(con)
}
'SELECT accept FROM license_override WHERE'
,db.quote(name),'= name'))
db.stop(con)
- return(results$accept)
+ if (length(results) == 0) {
+ return(FALSE)
+ }
+ return(as.logical(results$accept))
}
-db.add.license.override.name <- function(name,accept) {
+db.add.license.override <- function(name,accept) {
+ message(paste('adding',name,'accept?',accept))
+ if (accept != TRUE && accept != FALSE) {
+ stop('accept must be TRUE or FALSE')
+ }
con <- db.start()
results <- dbGetQuery(con,paste(
'INSERT OR REPLACE INTO license_override'
,'(name, accept) VALUES ('
,' ',db.quote(name)
- ,',',db.quote(accept)
+ ,',',as.integer(accept)
,')'))
db.stop(con)
}
db.license.override.file <- function(file_sha1) {
con <- db.start()
results <- dbGetQuery(con,paste(
- 'SELECT accept FROM license_override WHERE'
- ,db.quote(file_sha1),'= file_sha1'))
+ 'SELECT name,accept FROM license_override'
+ ,'INNER JOIN license_files'
+ ,'ON license_files.name = license_override.name WHERE'
+ ,db.quote(file_sha1),'= license_files.file_sha1'))
db.stop(con)
- return(results$accept)
+ # TODO: change accept from 0,1 into FALSE,TRUE
+ # TODO: NULL -> FALSE
+ return(results)
}
-db.add.license.override.file <- function(name,file_sha1,accept) {
+db.license.overrides <- function() {
con <- db.start()
- results <- dbGetQuery(con,paste(
- 'INSERT OR REPLACE INTO license_override'
- ,'(name, file_sha1, accept) VALUES ('
- ,' ',db.quote(name)
- ,',',db.quote(file_sha1)
- ,',',db.quote(accept)
- ,')'))
+ overrides <- dbGetQuery(con,paste('SELECT * FROM license_override'))
+ files <- dbGetQuery(con,paste('SELECT * FROM license_files'))
+ db.stop(con)
+ # TODO: change accept from 0,1 into FALSE,TRUE
+ return(list(overrides=overrides,files=files))
+}
+
+db.add.license.file <- function(name,file_sha1) {
+ message(paste('adding file',file_sha1,'for',name))
+ con <- db.start()
+ dbGetQuery(con,paste(
+ 'INSERT OR REPLACE INTO license_files'
+ ,'(name, file_sha1) VALUES ('
+ ,' ',db.quote(name)
+ ,',',db.quote(file_sha1)
+ ,')'))
db.stop(con)
}
-debian_ok_licenses=c('GPL','LGPL','AGPL','ARTISTIC' #,'UNLIMITED'
- ,'BSD','MIT','APACHE','X11','MPL')
-
is_acceptable_license <- function(license) {
# determine if license is acceptable
# don't care about versions of licenses
license = chomp(sub('\\( ?[<=>!]+ ?[0-9.-]+ ?\\)',''
,sub('-[0-9.-]+','',license)))
- if (license %in% debian_ok_licenses) {
+ if (db.license.override.name(license)) {
return(T)
}
# uninteresting urls
license = gsub('(MOZILLA )?(MPL|MOZILLA PUBLIC)','MPL',license)
# remove any extra space introduced
license = chomp(gsub('[[:space:]]+',' ',license))
- if (license %in% debian_ok_licenses) {
+ if (db.license.override.name(license)) {
message(paste('W: Accepted wild license as',license,'. FIX THE PACKAGE!'))
return(T)
}
,license)
# remove any extra space introduced
license = chomp(gsub('[[:space:]]+',' ',license))
- if (license %in% debian_ok_licenses) {
+ if (db.license.override.name(license)) {
message(paste('W: Accepted wild license as',license,'. FIX THE PACKAGE!'))
return(T)
}
- # TODO: put debian_ok_licenses in DB
# TODO: file {LICENSE,LICENCE} (+ maybe COPYING?)
message(paste('E: Wild license',license,'did not match'))
return(F)
if (is.data.frame(fringe)) {
fringe <- as.list(fringe$name)
}
- fun = function(x) levels(r.dependencies.of(name=x)$name)
+ fun = function(x) r.dependencies.of(name=x)$name
if (!forward_arcs) {
fun = r.requiring
}
system('dpkg-architecture -qDEB_HOST_ARCH',intern=T)
}
+err <- function(text) {
+ message(paste('E:',text))
+ exit()
+}
+
+exit <- function() {
+ q(save='no')
+}
break
}
if (i == argc) {
- message('E: missing argument')
- q(save='no')
+ err('missing argument')
}
if (argv[i] == '-D') {
extra_deps$deb = c(extra_deps$deb,strsplit(chomp(argv[i+1]),',')[[1]])
}
}
if (argc == 0) {
- message('E: usage: cran2deb [-D extra_dep1,extra_dep2,...] package package ...')
- q(save='no')
+ err('usage: cran2deb [-D extra_dep1,extra_dep2,...] package package ...')
}
build_order <- r.dependency.closure(c(extra_deps$r,argv))
message(paste('N: build order',paste(build_order,collapse=', ')))
}
sudo pbuilder $mode --override-config --configfile $root/etc/pbuilderrc
$root/exec/update_cache $root
+$root/exec/license <$root/data/populate_licenses