]> git.donarmstrong.com Git - cran2deb.git/blob - pkg/trunk/R/db.R
licenses+db: delegate license acceptance to the database. add license management...
[cran2deb.git] / pkg / trunk / R / db.R
1
2 db.start <- function() {
3     drv <- dbDriver('SQLite')
4     con <- dbConnect(drv, dbname=file.path(root,'data/cran2deb.db'))
5     tables <- dbListTables(con)
6     if (!dbExistsTable(con,'sysreq_override')) {
7         dbGetQuery(con,paste('CREATE TABLE sysreq_override ('
8                   ,' debian_name TEXT UNIQUE NOT NULL'
9                   ,',r_pattern TEXT UNIQUE NOT NULL'
10                   ,')'))
11     }
12     if (!dbExistsTable(con,'license_override')) {
13         dbGetQuery(con,paste('CREATE TABLE license_override ('
14                   ,' name TEXT PRIMARY KEY NOT NULL'
15                   ,',accept INT NOT NULL'
16                   ,')'))
17     }
18     if (!dbExistsTable(con,'license_files')) {
19         dbGetQuery(con,paste('CREATE TABLE license_files ('
20                   ,' name TEXT NOT NULL'
21                   ,',file_sha1 TEXT PRIMARY KEY NOT NULL'
22                   ,')'))
23     }
24     return(con)
25 }
26
27 db.stop <- function(con) {
28     dbDisconnect(con)
29 }
30
31 db.quote <- function(text) {
32     return(paste('"',gsub('([^][[:alnum:]*?. ()<>:/=-])','\\\\\\1',text),'"',sep=''))
33 }
34
35 db.sysreq.override <- function(sysreq_text) {
36     con <- db.start()
37     results <- dbGetQuery(con,paste(
38                     'SELECT debian_name FROM sysreq_override WHERE'
39                             ,db.quote(sysreq_text),'GLOB r_pattern'))
40     db.stop(con)
41     return(results$debian_name)
42 }
43
44 db.add.sysreq.override <- function(pattern,debian_name) {
45     con <- db.start()
46     results <- dbGetQuery(con,paste(
47                      'INSERT OR REPLACE INTO sysreq_override'
48                     ,'(debian_name, r_pattern) VALUES ('
49                     ,' ',db.quote(debian_name)
50                     ,',',db.quote(pattern)
51                     ,')'))
52     db.stop(con)
53 }
54
55 db.license.override.name <- function(name) {
56     con <- db.start()
57     results <- dbGetQuery(con,paste(
58                     'SELECT accept FROM license_override WHERE'
59                             ,db.quote(name),'= name'))
60     db.stop(con)
61     if (length(results) == 0) {
62         return(FALSE)
63     }
64     return(as.logical(results$accept))
65 }
66
67 db.add.license.override <- function(name,accept) {
68     message(paste('adding',name,'accept?',accept))
69     if (accept != TRUE && accept != FALSE) {
70         stop('accept must be TRUE or FALSE')
71     }
72     con <- db.start()
73     results <- dbGetQuery(con,paste(
74                      'INSERT OR REPLACE INTO license_override'
75                     ,'(name, accept) VALUES ('
76                     ,' ',db.quote(name)
77                     ,',',as.integer(accept)
78                     ,')'))
79     db.stop(con)
80 }
81
82 db.license.override.file <- function(file_sha1) {
83     con <- db.start()
84     results <- dbGetQuery(con,paste(
85                      'SELECT name,accept FROM license_override'
86                     ,'INNER JOIN license_files'
87                     ,'ON license_files.name = license_override.name WHERE'
88                     ,db.quote(file_sha1),'= license_files.file_sha1'))
89     db.stop(con)
90     # TODO: change accept from 0,1 into FALSE,TRUE
91     # TODO: NULL -> FALSE
92     return(results)
93 }
94
95 db.license.overrides <- function() {
96     con <- db.start()
97     overrides <- dbGetQuery(con,paste('SELECT * FROM license_override'))
98     files     <- dbGetQuery(con,paste('SELECT * FROM license_files'))
99     db.stop(con)
100     # TODO: change accept from 0,1 into FALSE,TRUE
101     return(list(overrides=overrides,files=files))
102 }
103
104 db.add.license.file <- function(name,file_sha1) {
105     message(paste('adding file',file_sha1,'for',name))
106     con <- db.start()
107     dbGetQuery(con,paste(
108          'INSERT OR REPLACE INTO license_files'
109         ,'(name, file_sha1) VALUES ('
110         ,' ',db.quote(name)
111         ,',',db.quote(file_sha1)
112         ,')'))
113     db.stop(con)
114 }
115