aboutsummaryrefslogtreecommitdiff
path: root/guix/scripts/system.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-08-30 17:59:15 +0200
committerLudovic Courtès <ludo@gnu.org>2016-08-31 15:44:19 +0200
commit183605c8533ad321ff8bba209b64071a9e84714a (patch)
treeacf1fd1ac0e496f7dd7d69a006e1859f6bdad1fa /guix/scripts/system.scm
parent1bc4d0c26634163413a8ec12c627367ca5c1bbba (diff)
downloadgnu-guix-183605c8533ad321ff8bba209b64071a9e84714a.tar
gnu-guix-183605c8533ad321ff8bba209b64071a9e84714a.tar.gz
services: herd: Provide <live-service> objects.
* gnu/services/herd.scm (<live-service>): New record type. (current-services): Change to return a single value: #f or a list of <live-service>. * guix/scripts/system.scm (call-with-service-upgrade-info): Adjust accordingly. * gnu/tests/base.scm (run-basic-test)["shepherd services"]: Adjust accordingly.
Diffstat (limited to 'guix/scripts/system.scm')
-rw-r--r--guix/scripts/system.scm51
1 files changed, 28 insertions, 23 deletions
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index a9fe7d5975..55a8e475d4 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -283,29 +283,34 @@ unload."
(map (compose first shepherd-service-provision)
new-services))
- (let-values (((running stopped) (current-services)))
- (if (and running stopped)
- (let* ((to-load
- ;; Only load services that are either new or currently stopped.
- (remove (lambda (service)
- (memq (first (shepherd-service-provision service))
- running))
- new-services))
- (to-unload
- ;; Unload services that are (1) no longer required, or (2) are
- ;; in TO-LOAD.
- (remove essential?
- (append (remove (lambda (service)
- (memq service new-service-names))
- (append running stopped))
- (filter (lambda (service)
- (memq service stopped))
- (map shepherd-service-canonical-name
- to-load))))))
- (mproc to-load to-unload))
- (with-monad %store-monad
- (warning (_ "failed to obtain list of shepherd services~%"))
- (return #f)))))
+ (match (current-services)
+ ((services ...)
+ (let* ((running (map (compose first live-service-provision)
+ (filter live-service-running services)))
+ (stopped (map (compose first live-service-provision)
+ (remove live-service-running services)))
+ (to-load
+ ;; Only load services that are either new or currently stopped.
+ (remove (lambda (service)
+ (memq (first (shepherd-service-provision service))
+ running))
+ new-services))
+ (to-unload
+ ;; Unload services that are (1) no longer required, or (2) are
+ ;; in TO-LOAD.
+ (remove essential?
+ (append (remove (lambda (service)
+ (memq service new-service-names))
+ (append running stopped))
+ (filter (lambda (service)
+ (memq service stopped))
+ (map shepherd-service-canonical-name
+ to-load))))))
+ (mproc to-load to-unload)))
+ (#f
+ (with-monad %store-monad
+ (warning (_ "failed to obtain list of shepherd services~%"))
+ (return #f)))))
(define (upgrade-shepherd-services os)
"Upgrade the Shepherd (PID 1) by unloading obsolete services and loading new