utils: with-transformation: Handle more cases.

* nonguix/utils.scm (with-transformation): Skip parameters.
Avoid duplicating file system packages.
This commit is contained in:
Hilton Chain 2025-05-05 18:30:59 +08:00
parent d49157010b
commit 5f3ad33833
No known key found for this signature in database
GPG key ID: ACC66D09CA528292

View file

@ -64,6 +64,9 @@ matches PRED."
(match obj (match obj
((? pred) ((? pred)
(proc obj)) (proc obj))
;; TODO: Check if this can be handled as well.
((? parameter?)
obj)
((? procedure?) ((? procedure?)
(lambda args (lambda args
(apply values (apply values
@ -88,14 +91,24 @@ matches PRED."
(? origin?)) (? origin?))
obj) obj)
((? record?) ((? record?)
(let* ((record-type (record-type-descriptor obj)) (cond
(record-fields (record-type-fields record-type))) ;; Both file-systems and boot-file-system-utilities services extends
(apply (record-constructor record-type) ;; profile-service-type with the same package, however information of
(map (lambda (field) ;; the former one is hidden from us, causing conflict in the resulted
(let* ((accessor (record-accessor record-type field)) ;; profile.
(obj (accessor obj))) ((and (service? obj)
(with-transformation proc obj pred))) (eq? 'boot-file-system-utilities
record-fields)))) (service-type-name (service-kind obj))))
obj)
(else
(let* ((record-type (record-type-descriptor obj))
(record-fields (record-type-fields record-type)))
(apply (record-constructor record-type)
(map (lambda (field)
(let* ((accessor (record-accessor record-type field))
(obj (accessor obj)))
(with-transformation proc obj pred)))
record-fields))))))
(_ obj))) (_ obj)))
(define (package-with-alias alias pkg) (define (package-with-alias alias pkg)