From fe556f4a4d6d7ce7f92e31e955595a557faae435 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Fri, 4 Mar 2022 14:22:10 +0000 Subject: [PATCH] Deduplicate inferior packages including replacements Previously, duplicates could creep through if the duplicate wasn't exported, and only found as a replacement. Now they're filtered out. This isn't ideal, as duplicates aren't always mistakes, it would be useful still to capture this package, but having multiple entries for the same name+version causes the comparison functionality to break. --- .../jobs/load-new-guix-revision.scm | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm index 2bcb99d..2b8a34b 100644 --- a/guix-data-service/jobs/load-new-guix-revision.scm +++ b/guix-data-service/jobs/load-new-guix-revision.scm @@ -781,31 +781,32 @@ WHERE job_id = $1") b-name))))))) (define (inferior-packages-plus-replacements inf) - (let* ((packages + (let* ((packages (inferior-packages inf)) + (replacements (filter-map inferior-package-replacement packages)) + (non-exported-replacements + (let ((package-id-hash-table (make-hash-table))) + (for-each (lambda (pkg) + (hash-set! package-id-hash-table + (inferior-package-id pkg) + #t)) + packages) + + (filter (lambda (pkg) + (eq? #f + (hash-ref package-id-hash-table + (inferior-package-id pkg)))) + replacements))) + + (deduplicated-packages ;; This isn't perfect, sometimes there can be two packages with the ;; same name and version, but different derivations. Guix will warn ;; about this case though, generally this means only one of the ;; packages should be exported. (deduplicate-inferior-packages - (inferior-packages inf))) - (replacements (filter-map inferior-package-replacement packages)) + (append! packages non-exported-replacements)))) - (package-id-hash-table (make-hash-table))) - (for-each (lambda (pkg) - (hash-set! package-id-hash-table - (inferior-package-id pkg) - #t)) - packages) - - (let ((non-exported-replacements - (filter (lambda (pkg) - (eq? #f - (hash-ref package-id-hash-table - (inferior-package-id pkg)))) - replacements))) - - (append packages non-exported-replacements)))) + deduplicated-packages)) (define* (insert-packages conn inf packages #:key (process-replacements? #t)) (let* ((package-license-set-ids