mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-05-26 02:51:49 +02:00
gnu: services: Revert to deleting and updating all matching services
This patch reverts the behavior introduced in
1819512073 which caused ‘modify-services’
clauses to only match a single instance of a service.
We will now match all service instances when doing a deletion or update, while
still raising an exception when trying to match against a service that does
not exist in the services list, or which was deleted explicitly by a ‘delete’
clause (or an update clause that returns ‘#f’ for the service).
Fixes: #64106
* gnu/services.scm (%modify-services): New procedure.
(modify-services): Use it.
(apply-clauses): Add DELETED-SERVICES argument, change to modify one service
at a time.
* tests/services.scm
("modify-services: delete then modify")
("modify-services: modify then delete")
("modify-services: delete multiple services of the same type")
("modify-services: modify multiple services of the same type"): New tests.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
committed by
Maxim Cournoyer
parent
69f6edc1a8
commit
f66fa5f917
@@ -370,4 +370,72 @@
|
||||
(modify-services services
|
||||
(t2 value => 22)))))
|
||||
|
||||
(test-error "modify-services: delete then modify"
|
||||
#t
|
||||
(let* ((t1 (service-type (name 't1)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t2 (service-type (name 't2)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t3 (service-type (name 't3)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(services (list (service t1 1) (service t2 2) (service t3 3))))
|
||||
(map service-value
|
||||
(modify-services services
|
||||
(delete t2)
|
||||
(t2 value => 22)))))
|
||||
|
||||
(test-equal "modify-services: modify then delete"
|
||||
'(2 3)
|
||||
(let* ((t1 (service-type (name 't1)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t2 (service-type (name 't2)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t3 (service-type (name 't3)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(services (list (service t1 1) (service t2 2) (service t3 3))))
|
||||
(map service-value
|
||||
(modify-services services
|
||||
(t1 value => 11)
|
||||
(delete t1)))))
|
||||
|
||||
(test-equal "modify-services: delete multiple services of the same type"
|
||||
'(1 3)
|
||||
(let* ((t1 (service-type (name 't1)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t2 (service-type (name 't2)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t3 (service-type (name 't3)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(services (list (service t1 1) (service t2 2)
|
||||
(service t2 2) (service t3 3))))
|
||||
(map service-value
|
||||
(modify-services services
|
||||
(delete t2)))))
|
||||
|
||||
(test-equal "modify-services: modify multiple services of the same type"
|
||||
'(1 12 13 4)
|
||||
(let* ((t1 (service-type (name 't1)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t2 (service-type (name 't2)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(t3 (service-type (name 't3)
|
||||
(extensions '())
|
||||
(description "")))
|
||||
(services (list (service t1 1) (service t2 2)
|
||||
(service t2 3) (service t3 4))))
|
||||
(map service-value
|
||||
(modify-services services
|
||||
(t2 value => (+ value 10))))))
|
||||
|
||||
(test-end)
|
||||
|
||||
Reference in New Issue
Block a user