diff options
author | Christopher Baines <mail@cbaines.net> | 2024-01-15 11:19:58 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2024-01-18 14:41:32 +0000 |
commit | 60980e2668961d4b215f22fde670c638e9b7b7ab (patch) | |
tree | 67fcfdd2aea2cca534a8e118fa7dee51925ce610 /guix-data-service | |
parent | 49b4841c4e1f6745fd5a148cdeb3cf118164b70c (diff) | |
download | data-service-60980e2668961d4b215f22fde670c638e9b7b7ab.tar data-service-60980e2668961d4b215f22fde670c638e9b7b7ab.tar.gz |
Use delete-duplicates/sort! in inferior-packages->license-set-ids
As it should offer a speedup over delete-duplicates.
Diffstat (limited to 'guix-data-service')
-rw-r--r-- | guix-data-service/model/license-set.scm | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/guix-data-service/model/license-set.scm b/guix-data-service/model/license-set.scm index 7f23eaf..cff68b7 100644 --- a/guix-data-service/model/license-set.scm +++ b/guix-data-service/model/license-set.scm @@ -19,6 +19,7 @@ #:use-module (srfi srfi-1) #:use-module (ice-9 vlist) #:use-module (squee) + #:use-module (guix-data-service utils) #:use-module (guix-data-service model utils) #:use-module (guix-data-service model license) #:export (inferior-packages->license-set-ids)) @@ -45,9 +46,7 @@ FROM license_sets") " RETURNING id")) (define (inferior-packages->license-set-ids conn license-id-lists) - (let* ((unique-license-id-lists (delete-duplicates - license-id-lists)) - (existing-license-sets + (let* ((existing-license-sets (exec-query->vhash conn select-license-sets (lambda (results) @@ -63,11 +62,22 @@ FROM license_sets") (lambda (result) (string->number (first result))))) ;; id (missing-license-sets - (delete-duplicates - (filter (lambda (license-set-license-ids) - (not (vhash-assoc license-set-license-ids - existing-license-sets))) - unique-license-id-lists))) + (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 + (< (car a) (car b)))))))) (new-license-set-entries (if (null? missing-license-sets) '() |