aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2024-01-15 11:19:58 +0000
committerChristopher Baines <mail@cbaines.net>2024-01-18 14:41:32 +0000
commit60980e2668961d4b215f22fde670c638e9b7b7ab (patch)
tree67fcfdd2aea2cca534a8e118fa7dee51925ce610 /guix-data-service
parent49b4841c4e1f6745fd5a148cdeb3cf118164b70c (diff)
downloaddata-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.scm26
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)
'()