Use delete-duplicates/sort! in inferior-packages->license-set-ids
As it should offer a speedup over delete-duplicates.
This commit is contained in:
parent
49b4841c4e
commit
60980e2668
1 changed files with 18 additions and 8 deletions
|
|
@ -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)
|
||||
'()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue