Use delete-duplicates/sort! in inferior-packages->license-set-ids

As it should offer a speedup over delete-duplicates.
This commit is contained in:
Christopher Baines 2024-01-15 11:19:58 +00:00
parent 49b4841c4e
commit 60980e2668

View file

@ -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)
'()