bug-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#64365: [Shepherd] Export deregister-service.


From: Ludovic Courtès
Subject: bug#64365: [Shepherd] Export deregister-service.
Date: Wed, 12 Jul 2023 22:52:19 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)

Hi,

Bruno Victal <mirai@makinata.eu> skribis:

> Although 'register-services' is exported its counterpart
> 'deregister-service' is not.
>
> Some notes:
> * 'register-services' is in its plural form while its counterpart
> is not, maybe one of them should be renamed for consistency sake?
>
> * From the docstring and code the interface of 'deregister-service'
> seems to differ from 'register-services' though I haven't
> confirmed it. Perhaps add some documented examples for reference?

All good points.  Since ‘deregister-service’ is an internal helper with
a clunky interface (it takes a string, special-cases "all", prints
messages), I propose exposing ‘unregister-services’ as defined below.

WDYT?

Thanks,
Ludo’.

diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 6b8c562..e44cbef 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -95,6 +95,7 @@
             spawn-shell-command
             %precious-signals
             register-services
+            unregister-services
 
             default-respawn-limit
             default-service-termination-handler
@@ -2554,6 +2555,19 @@ If it is currently stopped, replace it immediately."
       (warn-deprecated-form)
       (register-services services)))))
 
+(define (unregister-services services)
+  "Remove all of @var{services} from the registry, stopping them if they are 
not
+already stopped."
+  (for-each (lambda (service)
+              (unless (service-stopped? service)
+                (stop-service service)))
+            services)
+
+  ;; Remove SERVICE from the registry.
+  (put-message (current-registry-channel)
+               `(unregister ,services))
+  #t)
+
 (define (deregister-service service-name)
   "For each string in SERVICE-NAME, stop the associated service if
 necessary and remove it from the services table.  If SERVICE-NAME is
@@ -2562,13 +2576,6 @@ the special string 'all', remove all services except of 
'root'.
 This will remove a service either if it is identified by its canonical
 name, or if it is the only service providing the service that is
 requested to be removed."
-  (define (deregister service)
-    (when (service-running? service)
-      (stop-service service))
-    ;; Remove services provided by service from the hash table.
-    (put-message (current-registry-channel)
-                 `(unregister ,(list service))))
-
   (let ((name (string->symbol service-name)))
     (cond ((eq? name 'all)
            ;; Special 'remove all' case.
@@ -2587,7 +2594,7 @@ requested to be removed."
                   (local-output
                    "Removing service '~a' providing '~a'..."
                    (service-canonical-name service) name))
-              (deregister service)
+              (unregister-services (list service))
               (local-output (l10n "Done."))))))))
 
 (define (load-config file-name)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]