summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2024-05-15 22:47:59 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2024-05-15 22:53:31 -0400
commit35ae95061e1b843e1df069693177519f22f9a16d (patch)
tree90b5847d4dd4f3e3a80391d0e1ca6e134ae3a793
parente66b8d0534acc55264470cf22fe0af111df52347 (diff)
downloadguix-patches-35ae95061e1b843e1df069693177519f22f9a16d.tar
guix-patches-35ae95061e1b843e1df069693177519f22f9a16d.tar.gz
system: Do not delete all nss-certs packages when they are the same object.
Calling 'delete' on the list of packages would delete *all* occurrences of a given object, not just the first one. This meant that if the user had something like: (packages (cons nss-certs %base-packages)) In their operating system declaration, no nss-certs would end up in the final list. To guard against this, guard against this by checking that more than one nss-certs package exist even after deduplication. * gnu/system.scm (operating-system-packages): Guard against deleting all nss-certs when a single nss-certs package object is listed multiple times. Fixes: https://issues.guix.gnu.org/70850 Change-Id: Id93be9242e026fd2e96a442941df80b94664ef9a
-rw-r--r--gnu/system.scm8
1 files changed, 7 insertions, 1 deletions
diff --git a/gnu/system.scm b/gnu/system.scm
index cb6e719ca6..c76f4d7c50 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -339,7 +339,13 @@ VERSION is the target version of the boot-parameters record."
(G_ "multiple 'nss-certs' packages found; 'nss-certs' \
is now included by default in '%base-packages'; ensure it is not explicitly \
listed in the operating system 'packages' field~%"))
- (fold delete packages (drop nss-certs-packages 1)))
+ (let ((nss-certs-packages (delete-duplicates nss-certs-packages eq?)))
+ (if (> (length nss-certs-packages) 1)
+ ;; Only mismatched nss-certs packages need to be handled to
+ ;; avoid profile collisions; same objects are later
+ ;; deduplicated in `packages->profile-entry'.
+ (fold delete packages (drop nss-certs-packages 1))
+ packages))) ;no-op
packages)))
(define* (operating-system-kernel-arguments