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 (srfi srfi-1)
#:use-module (ice-9 vlist) #:use-module (ice-9 vlist)
#:use-module (squee) #:use-module (squee)
#:use-module (guix-data-service utils)
#:use-module (guix-data-service model utils) #:use-module (guix-data-service model utils)
#:use-module (guix-data-service model license) #:use-module (guix-data-service model license)
#:export (inferior-packages->license-set-ids)) #:export (inferior-packages->license-set-ids))
@ -45,9 +46,7 @@ FROM license_sets")
" RETURNING id")) " RETURNING id"))
(define (inferior-packages->license-set-ids conn license-id-lists) (define (inferior-packages->license-set-ids conn license-id-lists)
(let* ((unique-license-id-lists (delete-duplicates (let* ((existing-license-sets
license-id-lists))
(existing-license-sets
(exec-query->vhash conn (exec-query->vhash conn
select-license-sets select-license-sets
(lambda (results) (lambda (results)
@ -63,11 +62,22 @@ FROM license_sets")
(lambda (result) (lambda (result)
(string->number (first result))))) ;; id (string->number (first result))))) ;; id
(missing-license-sets (missing-license-sets
(delete-duplicates (delete-duplicates/sort!
(filter (lambda (license-set-license-ids) ;; Use filter! with list-copy, as filter may return a list that
(not (vhash-assoc license-set-license-ids ;; shares a portion of the input list, and therefore could be at
existing-license-sets))) ;; risk of being modified when deleting duplicates
unique-license-id-lists))) (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 (new-license-set-entries
(if (null? missing-license-sets) (if (null? missing-license-sets)
'() '()