Ludovic Courtès (2016-01-25 00:20 +0300) wrote: > Alex Kost <alez...@gmail.com> skribis: [...] >> [PATCH 1/5] service: Rename 'services' variable to '%services'. >> [PATCH 2/5] service: Improve style of 'for-each-service'. >> >> [PATCH 3/5] service: 'service-list' returns unique services. >> >> Without this change, if the root service provides 2 names, 'herd status' >> would display: >> >> Started: (root root) >> Stopped: () >> >> [PATCH 4/5] service: Add docstring to 'lookup-services'. >> [PATCH 5/5] Rename 'dmd' service to 'root'. > > Excellent! I’ve pushed all 5 patches.
Ah, I'm late :-) I suddenly realized that for the 3rd patch it would be better to use 'lookup-canonical-service' instead of 'delete-duplicates'. It is guaranteed that there will be no duplicates since services have a single canonical name, so for each name from %services hash-table there will be either zero or one service with this canonical name. (Hm, I probably didn't describe it well, but I hope it's clear enough) So would it be OK to push the attached patch? > While I was at it, I’ve added Mathieu and you as committers. Thank you!
>From f3d21e3ec8a100a966153d03264639ebe48e8872 Mon Sep 17 00:00:00 2001 From: Alex Kost <alez...@gmail.com> Date: Mon, 25 Jan 2016 11:18:00 +0300 Subject: [PATCH] service: Improve 'service-list'. * modules/shepherd/service.scm (service-list): Use 'lookup-canonical-service' on each name instead of removing duplicates from the final list. --- modules/shepherd/service.scm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm index f84d1dd..94f2aae 100644 --- a/modules/shepherd/service.scm +++ b/modules/shepherd/service.scm @@ -871,12 +871,13 @@ Return #f if service is not found." (define (service-list) "Return the list of services currently defined." - (delete-duplicates - (hash-fold (lambda (key services result) - (append services result)) - '() - %services) - eq?)) + (hash-fold (lambda (name services result) + (let ((service (lookup-canonical-service name services))) + (if service + (cons service result) + result))) + '() + %services)) (define (find-service pred) "Return the first service that matches PRED, or #f if none was found." -- 2.6.3