aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/license-set.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/model/license-set.scm')
-rw-r--r--guix-data-service/model/license-set.scm88
1 files changed, 9 insertions, 79 deletions
diff --git a/guix-data-service/model/license-set.scm b/guix-data-service/model/license-set.scm
index 102d838..fe4272b 100644
--- a/guix-data-service/model/license-set.scm
+++ b/guix-data-service/model/license-set.scm
@@ -17,6 +17,7 @@
(define-module (guix-data-service model license-set)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-43)
#:use-module (ice-9 vlist)
#:use-module (squee)
#:use-module (guix-data-service utils)
@@ -24,83 +25,12 @@
#:use-module (guix-data-service model license)
#:export (inferior-packages->license-set-ids))
-(define select-license-sets
- "
-SELECT id, license_ids
-FROM license_sets")
-
-(define (insert-license-sets license-id-lists)
- (string-append
- "INSERT INTO license_sets (license_ids) VALUES "
- (string-join
- (map (lambda (license-ids)
- (string-append
- "('{"
- (string-join
- (map number->string
- (sort license-ids <))
- ", ")
- "}')"))
- license-id-lists)
- ", ")
- " RETURNING id"))
-
(define (inferior-packages->license-set-ids conn license-id-lists)
- (let* ((existing-license-sets
- (exec-query->vhash conn
- select-license-sets
- (lambda (results)
- (if (string=? (second results) "{}")
- '()
- (map
- string->number
- (string-split
- (string-drop-right
- (string-drop (second results) 1)
- 1)
- #\,))))
- (lambda (result)
- (string->number (first result))))) ;; id
- (missing-license-sets
- (delete-duplicates/sort!
- ;; Use filter! with list-copy, as filter may return a list that
- ;; shares a portion of the input list, and therefore could be at
- ;; risk of being modified when deleting duplicates
- (filter! (lambda (license-set-license-ids)
- (not (vhash-assoc license-set-license-ids
- existing-license-sets)))
- (list-copy license-id-lists))
- (lambda (full-a full-b)
- (let loop ((a full-a)
- (b full-b))
- (cond
- ((null? a) #f)
- ((null? b) #t)
- (else
- (let ((a1 (car a))
- (b1 (car b)))
- (if (= a1 b1)
- (loop (cdr a)
- (cdr b))
- (< a1 b1)))))))))
- (new-license-set-entries
- (if (null? missing-license-sets)
- '()
- (map (lambda (result)
- (string->number (first result)))
- (exec-query conn
- (insert-license-sets missing-license-sets)))))
- (new-entries-id-lookup-vhash
- (two-lists->vhash missing-license-sets
- new-license-set-entries)))
-
- (map (lambda (license-id-list)
- (cdr
- (or (vhash-assoc license-id-list
- existing-license-sets)
- (vhash-assoc license-id-list
- new-entries-id-lookup-vhash)
- (begin
- (error "missing license set entry"
- license-id-list)))))
- license-id-lists)))
+ (insert-missing-data-and-return-all-ids
+ conn
+ "license_sets"
+ '(license_ids)
+ (vector-map
+ (lambda (_ license-ids)
+ (list (sort license-ids <)))
+ license-id-lists)))