guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Christopher Baines
Subject: 02/13: Use delete-duplicates/sort! in inferior-packages->license-set-ids
Date: Fri, 19 Jan 2024 04:57:46 -0500 (EST)

cbaines pushed a commit to branch master
in repository data-service.

commit 60980e2668961d4b215f22fde670c638e9b7b7ab
Author: Christopher Baines <mail@cbaines.net>
AuthorDate: Mon Jan 15 11:19:58 2024 +0000

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]