diff options
Diffstat (limited to 'guix-data-service/model/license-set.scm')
-rw-r--r-- | guix-data-service/model/license-set.scm | 88 |
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))) |