From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39944) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dsF9f-0008Vd-8O for guix-patches@gnu.org; Wed, 13 Sep 2017 17:25:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dsF9e-0007Y8-Aa for guix-patches@gnu.org; Wed, 13 Sep 2017 17:25:07 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:58550) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dsF9e-0007Y0-7c for guix-patches@gnu.org; Wed, 13 Sep 2017 17:25:06 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dsF9d-0005Ye-VE for guix-patches@gnu.org; Wed, 13 Sep 2017 17:25:06 -0400 Subject: [bug#28452] [PATCH 3/6] services: Add 'fold-service-types'. Resent-Message-ID: From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Date: Wed, 13 Sep 2017 23:24:20 +0200 Message-Id: <20170913212423.5037-3-ludo@gnu.org> In-Reply-To: <20170913212423.5037-1-ludo@gnu.org> References: <20170913212423.5037-1-ludo@gnu.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 28452@debbugs.gnu.org * gnu/services.scm (%distro-root-directory, %service-type-path): New variables. (fold-service-types): New procedure. --- gnu/services.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/services.scm b/gnu/services.scm index 83a163b76..2ebd701a5 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -23,6 +23,7 @@ #:use-module (guix store) #:use-module (guix records) #:use-module (guix profiles) + #:use-module (guix discovery) #:use-module (guix sets) #:use-module (guix ui) #:use-module ((guix utils) #:select (source-properties->location)) @@ -52,6 +53,8 @@ service-type-description service-type-location + %service-type-path + fold-service-types service service? @@ -165,6 +168,27 @@ (set-record-type-printer! write-service-type) +(define %distro-root-directory + ;; Absolute file name of the module hierarchy. + (dirname (search-path %load-path "guix.scm"))) + +(define %service-type-path + ;; Search path for service types. + (make-parameter `((,%distro-root-directory . "gnu/services") + (,%distro-root-directory . "gnu/system")))) + +(define* (fold-service-types proc seed + #:optional + (modules (all-modules (%service-type-path)))) + "For each service type exported by one of MODULES, call (PROC RESULT). SEED +is used as the initial value of RESULT." + (fold-module-public-variables (lambda (object result) + (if (service-type? object) + (proc object result) + result)) + '() + modules)) + ;; Services of a given type. (define-record-type (make-service type value) -- 2.14.1