From 60980e2668961d4b215f22fde670c638e9b7b7ab Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Mon, 15 Jan 2024 11:19:58 +0000 Subject: Use delete-duplicates/sort! in inferior-packages->license-set-ids As it should offer a speedup over delete-duplicates. --- guix-data-service/model/license-set.scm | 26 ++++++++++++++++++-------- 1 file 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) '() -- cgit v1.2.3