From 44ee1e470a2f9d4985af4d51654d9f943caa0f24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= Date: Sat, 23 Jan 2021 20:39:06 +0800 Subject: [PATCH] services: Allow 'file-system-service-type' extensible by service name. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/services/base.scm (file-system-shepherd-services): Add 'extra-services-names' paramater. (file-system-service-type): Handle services’ names from extensions. --- gnu/services/base.scm | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index f6a490f712..7bddef5034 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -364,15 +364,16 @@ FILE-SYSTEM." (gnu system file-systems) ,@%default-modules))))))) -(define (file-system-shepherd-services file-systems) +(define (file-system-shepherd-services file-systems extra-services-names) "Return the list of Shepherd services for FILE-SYSTEMS." (let* ((file-systems (filter file-system-mount? file-systems))) (define sink (shepherd-service (provision '(file-systems)) - (requirement (cons* 'root-file-system 'user-file-systems - (map file-system->shepherd-service-name - file-systems))) + (requirement (append '(root-file-system user-file-systems) + (map file-system->shepherd-service-name + file-systems) + extra-services-names)) (documentation "Target for all the initially-mounted file systems") (start #~(const #t)) (stop #~(const #f)))) @@ -429,13 +430,23 @@ FILE-SYSTEM." (service-type (name 'file-systems) (extensions (list (service-extension shepherd-root-service-type - file-system-shepherd-services) + (lambda (value) + (file-system-shepherd-services + (filter file-system? value) + (filter symbol? value)))) (service-extension fstab-service-type - file-system-fstab-entries) + (lambda (value) + (file-system-fstab-entries + (filter file-system? value)))) ;; Have 'user-processes' depend on 'file-systems'. (service-extension user-processes-service-type (const '(file-systems))))) + + ;; Extensions consist of lists of objects or + ;; shepherd services’ names (symbols). In the latter case, + ;; the provided shepherd services supposed to mount and + ;; unmount some file systems themself. (compose concatenate) (extend append) (description -- 2.29.2