Change license code to use insert-missing-data-and-return-all-ids
As this now supports inserting sets of data.
This commit is contained in:
parent
80010a8a1b
commit
fc6bbf3e3c
1 changed files with 20 additions and 87 deletions
|
|
@ -1,6 +1,7 @@
|
|||
(define-module (guix-data-service model license)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (ice-9 vlist)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (squee)
|
||||
#:use-module (guix inferior)
|
||||
#:use-module (guix-data-service model utils)
|
||||
|
|
@ -43,95 +44,27 @@
|
|||
(inferior-eval '(use-modules (guix licenses)) inf)
|
||||
(inferior-eval (proc packages) inf))
|
||||
|
||||
(define (insert-licenses values)
|
||||
(string-append
|
||||
"INSERT INTO licenses "
|
||||
"(name, uri, comment) "
|
||||
"VALUES "
|
||||
(string-join
|
||||
(map (lambda (license-values)
|
||||
(string-append
|
||||
"("
|
||||
(string-join
|
||||
(map value->quoted-string-or-null
|
||||
license-values)
|
||||
", ")
|
||||
")"))
|
||||
values)
|
||||
", ")
|
||||
" RETURNING id"))
|
||||
|
||||
(define (inferior-packages->license-id-lists conn inf packages)
|
||||
(define license-data
|
||||
(inferior-packages->license-data inf packages))
|
||||
|
||||
(define (sort-license-ids ids)
|
||||
(map number->string
|
||||
(sort (map string->number ids) <)))
|
||||
(define (string-or-null v)
|
||||
(if (string? v)
|
||||
v
|
||||
;; save non string values as NULL
|
||||
NULL))
|
||||
|
||||
(define (non-string-to-false lst)
|
||||
(map (lambda (value)
|
||||
(if (string? value)
|
||||
value
|
||||
#f))
|
||||
lst))
|
||||
|
||||
(define (empty-string-to-false lst)
|
||||
;; TODO squee returns empty strings for null values, which will probably
|
||||
;; cause problems
|
||||
(map (lambda (value)
|
||||
(if (string? value)
|
||||
(if (string-null? value)
|
||||
#f
|
||||
value)
|
||||
value))
|
||||
lst))
|
||||
|
||||
(let* ((unique-license-tuples
|
||||
(filter (lambda (license-tuple)
|
||||
(not (null? license-tuple)))
|
||||
(delete-duplicates
|
||||
(map
|
||||
(lambda (lst)
|
||||
(non-string-to-false
|
||||
(empty-string-to-false lst)))
|
||||
(concatenate license-data)))))
|
||||
(existing-license-entries
|
||||
(exec-query->vhash conn
|
||||
"SELECT id, name, uri, comment FROM licenses"
|
||||
(lambda (vals)
|
||||
(non-string-to-false
|
||||
(empty-string-to-false (cdr vals))))
|
||||
first)) ;; id
|
||||
(missing-license-entries
|
||||
(delete-duplicates
|
||||
(filter (lambda (values)
|
||||
(not (vhash-assoc values
|
||||
existing-license-entries)))
|
||||
unique-license-tuples)))
|
||||
(new-license-entries
|
||||
(if (null? missing-license-entries)
|
||||
'()
|
||||
(map first
|
||||
(exec-query conn
|
||||
(insert-licenses missing-license-entries)))))
|
||||
(new-entries-id-lookup-vhash
|
||||
(two-lists->vhash missing-license-entries
|
||||
new-license-entries)))
|
||||
|
||||
(map (lambda (license-value-lists)
|
||||
(sort-license-ids
|
||||
(map (lambda (license-values)
|
||||
(cdr
|
||||
(or (vhash-assoc license-values
|
||||
existing-license-entries)
|
||||
(vhash-assoc license-values
|
||||
new-entries-id-lookup-vhash)
|
||||
(begin
|
||||
(error "missing license entry"
|
||||
license-values)))))
|
||||
(map (lambda (lst)
|
||||
(non-string-to-false
|
||||
(empty-string-to-false lst)))
|
||||
license-value-lists))))
|
||||
license-data)))
|
||||
(insert-missing-data-and-return-all-ids
|
||||
conn
|
||||
"licenses"
|
||||
`(name uri comment)
|
||||
(map (lambda (license-tuples)
|
||||
(map
|
||||
(match-lambda
|
||||
((name uri comment)
|
||||
(list name
|
||||
(string-or-null uri)
|
||||
(string-or-null comment))))
|
||||
license-tuples))
|
||||
license-data)
|
||||
#:sets-of-data? #t))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue