Message ID | cover.1686343642.git.mirai@makinata.eu |
---|---|
Headers |
Return-Path: <guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org> X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id D459227BBE9; Fri, 9 Jun 2023 22:19:17 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 67C0E27BBE2 for <patchwork@mira.cbaines.net>; Fri, 9 Jun 2023 22:19:15 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <guix-patches-bounces@gnu.org>) id 1q7jVg-0005DS-Lr; Fri, 09 Jun 2023 17:19:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1q7jVf-0005DH-2T for guix-patches@gnu.org; Fri, 09 Jun 2023 17:19:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1q7jVe-0006jI-Ps; Fri, 09 Jun 2023 17:19:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1q7jVe-0000Pr-JF; Fri, 09 Jun 2023 17:19:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#63985] [PATCH RFC 0/5] Generic INI serializer & SRFI-171 for define-configuration Resent-From: Bruno Victal <mirai@makinata.eu> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces@debbugs.gnu.org> Resent-CC: ludo@gnu.org, maxim.cournoyer@gmail.com, liliana.prikler@gmail.com, guix-patches@gnu.org Resent-Date: Fri, 09 Jun 2023 21:19:02 +0000 Resent-Message-ID: <handler.63985.B.16863455291578@debbugs.gnu.org> Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 63985 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 63985@debbugs.gnu.org Cc: Bruno Victal <mirai@makinata.eu>, ludo@gnu.org, maxim.cournoyer@gmail.com, liliana.prikler@gmail.com X-Debbugs-Original-To: guix-patches@gnu.org X-Debbugs-Original-Xcc: ludo@gnu.org, maxim.cournoyer@gmail.com, liliana.prikler@gmail.com Received: via spool by submit@debbugs.gnu.org id=B.16863455291578 (code B ref -1); Fri, 09 Jun 2023 21:19:02 +0000 Received: (at submit) by debbugs.gnu.org; 9 Jun 2023 21:18:49 +0000 Received: from localhost ([127.0.0.1]:32868 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces@debbugs.gnu.org>) id 1q7jVQ-0000PO-TS for submit@debbugs.gnu.org; Fri, 09 Jun 2023 17:18:49 -0400 Received: from lists.gnu.org ([209.51.188.17]:54216) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mirai@makinata.eu>) id 1q7jVP-0000PF-As for submit@debbugs.gnu.org; Fri, 09 Jun 2023 17:18:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <mirai@makinata.eu>) id 1q7jVO-0005CP-Uo for guix-patches@gnu.org; Fri, 09 Jun 2023 17:18:46 -0400 Received: from smtpm4.myservices.hosting ([185.26.105.235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <mirai@makinata.eu>) id 1q7jVN-0006gA-5S for guix-patches@gnu.org; Fri, 09 Jun 2023 17:18:46 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpm4.myservices.hosting (Postfix) with ESMTP id 8D6CD20D86 for <guix-patches@gnu.org>; Fri, 9 Jun 2023 23:18:42 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id C8E8B80097; Fri, 9 Jun 2023 23:18:38 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id MqEhTByOxNlt; Fri, 9 Jun 2023 23:18:38 +0200 (CEST) Received: from guix-nuc.home.arpa (unknown [10.192.1.83]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id 39E4B80060; Fri, 9 Jun 2023 23:18:38 +0200 (CEST) From: Bruno Victal <mirai@makinata.eu> Date: Fri, 9 Jun 2023 22:18:24 +0100 Message-Id: <cover.1686343642.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=185.26.105.235; envelope-from=mirai@makinata.eu; helo=smtpm4.myservices.hosting X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: <guix-patches.gnu.org> List-Unsubscribe: <https://lists.gnu.org/mailman/options/guix-patches>, <mailto:guix-patches-request@gnu.org?subject=unsubscribe> List-Archive: <https://lists.gnu.org/archive/html/guix-patches> List-Post: <mailto:guix-patches@gnu.org> List-Help: <mailto:guix-patches-request@gnu.org?subject=help> List-Subscribe: <https://lists.gnu.org/mailman/listinfo/guix-patches>, <mailto:guix-patches-request@gnu.org?subject=subscribe> Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches |
Series |
Generic INI serializer & SRFI-171 for define-configuration
|
|
Message
Bruno Victal
June 9, 2023, 9:18 p.m. UTC
This RFC patch series (more like 3 patch series for the price of 1) implements the following: * Serializer Keyword arguments parameter in define-configuration. Allows for serializing procedures to be specified as: (define* (serialize-string field-name value #:key …) …) Examples in the unit tests. * Express serialize-configuration with SRFI-171 transducers. The ‘base-transducer’ can be used to craft more specialized configuration record serializers. * Generic INI serializer. This procedure can be used for crafting INI files from a record-type defined with define-configuration. Example for generic-ini in action can be found in the unit test. These changes are motivated in part by a (in progress) refactoring of the NetworkManager service-type. Notes: * I've left Generic-INI and serializer-kwargs undocumented since this is at its RFC stage. * The (gnu services configuration generic-ini) module contains some trailing notes that should be removed before merging in. * jami-account->alist explicitly checks for the empty-string. (which I consider to be a serialization “artifact” arising from define-maybe) This is the only (relevant) test that failed and will need to be investigated. Bruno Victal (5): services: configuration: Simplify normalize-extra-args. services: configuration: Use transducers within serialize-configuration. services: fstrim-service-type: Serialize with SRFI-171 transducers. services: configuration: Add serializer-kwargs field. services: configuration: New generic-ini module. Makefile.am | 1 + gnu/local.mk | 1 + gnu/services/configuration.scm | 86 +++++++++---- gnu/services/configuration/generic-ini.scm | 129 +++++++++++++++++++ gnu/services/linux.scm | 11 +- tests/services/configuration.scm | 38 +++++- tests/services/configuration/generic-ini.scm | 106 +++++++++++++++ 7 files changed, 333 insertions(+), 39 deletions(-) create mode 100644 gnu/services/configuration/generic-ini.scm create mode 100644 tests/services/configuration/generic-ini.scm base-commit: c348b1be3891e6eb47bbdd9fc1587aba2b6ab0b7
Comments
This patch-series is an agglomeration of smaller but weakly-related patch-series, done so in order to build up the case for the changes. I structured the series in order to make it suitable for cherry-picking. Summary of changes: * Plumbing changes to serialize-configuration By orienting it around SRFI-171 transducers, it's now easier to build custom configuration serializing procedures. * New define-configuration syntax: serializer-options Serializers may now accept more than two arguments. * New module (gnu services configuration generic-ini) * Deduplicate often used predicates. * network-manager-service-type cleanup & new fields. Notable changes since v2: * Documentation changes The documentation for define-configuration was reworded to make later syntax extensions easier to document. In addition, the new 'serializer-options' is now documented. * (gnu services configuration) changes ** New predicates. Reduce code duplication by migrating some commonly used predicates into this module. * generic-ini changes ** Initial field testing Some deficiencies were found & corrected while doing a first field testing when network-manager-service-type was refactored to make use of this module. ** generic-ini- serializers ** Handling of multiple entries Implemented as a transducer, this is useful to deal with escape-hatch fields. * network-manager-service-type changes ** Use define-configuration for <network-manager-configuration> ** Refactored serialization process to use the new generic-ini module ** New configuration fields: log-configuration and extra-options Provides an escape hatch for options not yet implemented in the record type. ** Renamed fields: 'network-manager' to 'package' Naming the field 'package' is more informative & less confusing than a reduplication of the package-name with the field-name itself. Omissions in generic-ini: For now, I've omitted: * Custom leading (presumed to be whitespace) characters for entries à la gitconfig, mostly beautifying purposes * Configurable delimiter (\n, \r\n, \0, ...) * Configurable Key-value separator (this is usually =) These can be implemented later if required. Notes: The interface in (gnu services configuration generic-ini) is still in its infancy and might require further adjustments/additions and I'm still thinking about its potential generalizations to TOML & co. For the time being I'd prefer not to promise any interface stability. Nice to haves: I didn't have much luck in replacing the memq approach in the predicate with define-enumeration: --8<---------------cut here---------------start------------->8--- ;; This works. (define (network-manager-log-level? x) (memq x '(off err warn info debug trace))) ;; This does not. (define-enumeration network-manager-log-level? (off err warn info debug trace) network-manager-log-level-set) ;; While executing meta-command: ;; ERROR: ;; 1. &origin: "network-manager-log-level?" ;; 2. &message: "not a member of the set" ;; 3. &syntax: ;; form: #f ;; subform: #f --8<---------------cut here---------------end--------------->8--- Would be nice to know what went wrong and whether an enumeration could be used here instead. Bruno Victal (11): services: configuration: Simplify normalize-extra-args. services: configuration: Use transducers within serialize-configuration. services: fstrim-service-type: Serialize with SRFI-171 transducers. doc: Rewrite define-configuration. services: configuration: Add serializer-options field. services: configuration: New generic-ini module. services: configuration: Add some commonly used predicates. services: NetworkManager: Use define-configuration and generic-ini. services: NetworkManager: Prefer package over network-manager. services: NetworkManager: add log-configuration field. services: NetworkManager: Add extra-options field. Makefile.am | 1 + doc/guix.texi | 161 +++++---- gnu/local.mk | 1 + gnu/services/audio.scm | 7 +- gnu/services/configuration.scm | 108 ++++-- gnu/services/configuration/generic-ini.scm | 165 +++++++++ gnu/services/linux.scm | 11 +- gnu/services/networking.scm | 352 ++++++++++++++----- gnu/services/telephony.scm | 49 ++- tests/services/configuration.scm | 88 ++++- tests/services/configuration/generic-ini.scm | 129 +++++++ 11 files changed, 861 insertions(+), 211 deletions(-) create mode 100644 gnu/services/configuration/generic-ini.scm create mode 100644 tests/services/configuration/generic-ini.scm base-commit: ac86174e22fcd762893bd4515786b1376af9397b
Notable changes since v3: * Reduced series scope for SRFI-171 related changes and documentation improvements. * Added docstrings. Note: docstring for `serialize-configuration' lifted from guix.texi. * Addressed feedback from v3. Bruno Victal (5): services: configuration: Simplify normalize-extra-args. services: configuration: Use transducers within serialize-configuration. services: fstrim-service-type: Serialize with SRFI-171 transducers. doc: Rewrite define-configuration. services: configuration: Add some commonly used predicates. doc/guix.texi | 108 +++++++++++++------------------ gnu/services/audio.scm | 7 +- gnu/services/configuration.scm | 81 +++++++++++++++++------ gnu/services/linux.scm | 11 ++-- gnu/services/telephony.scm | 49 ++++++-------- tests/services/configuration.scm | 6 +- 6 files changed, 136 insertions(+), 126 deletions(-) base-commit: b566e1a98a74d84d3978cffefd05295602c9445d