[PATCH] gnu: Throw error when extending services that do not use extensions.

  • Open
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Richard Sent
Owner
unassigned
Submitted by
Richard Sent
Severity
normal
R
R
Richard Sent wrote on 4 Jul 00:12 +0200
(address . guix-patches@gnu.org)(name . Richard Sent)(address . richard@freakingpenguin.com)
e556c70340d5cda9b87852e137722d082f093c10.1720044768.git.richard@freakingpenguin.com
* gnu/services.scm (fold-services): Add error handling when using service
extensions.

Change-Id: Ic8d631674bfddde495c93952d9e6cd5649bb287d
---
gnu/services.scm | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)

Toggle diff (37 lines)
diff --git a/gnu/services.scm b/gnu/services.scm
index 88593e8091..a7a9e00478 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -1223,12 +1223,22 @@ (define* (fold-services services
(params -> (service-value sink))
(service
->
- ;; Distinguish COMPOSE and EXTEND because PARAMS typically
- ;; has a different type than the elements of EXTENSIONS.
- (if extend
- (service (service-kind sink)
- (extend params (compose extensions)))
- sink)))
+ (begin
+ (unless (or (null? extensions)
+ ;; A value of #t is a convention for "make
+ ;; sure the service is present."
+ (every (cut eq? #t <>) extensions)
+ (and extend compose))
+ (error (format #f "Extensions are not supported in \
+~a yet the following service types extend it:~{~% ~a~}"
+ (service-kind sink)
+ (map service-kind dependents))))
+ ;; Distinguish COMPOSE and EXTEND because PARAMS typically
+ ;; has a different type than the elements of EXTENSIONS.
+ (if extend
+ (service (service-kind sink)
+ (extend params (compose extensions)))
+ sink))))
(mbegin %state-monad
(set-current-state (vhash-consq sink service visited))
(return service))))

base-commit: 85012e64819b39fd6112038134548b415fd5daff
--
2.45.2
R
R
Richard Sent wrote on 4 Jul 00:21 +0200
[PATCH v2] gnu: Throw error when extending services that do not use extensions.
(address . 71928@debbugs.gnu.org)(name . Richard Sent)(address . richard@freakingpenguin.com)
6afb44e7f09f2d8fdbbe4cd0bad92ca170aef1b0.1720045261.git.richard@freakingpenguin.com
* gnu/services.scm (fold-services): Add error handling when using service
extensions.

Change-Id: Ic8d631674bfddde495c93952d9e6cd5649bb287d
---
gnu/services.scm | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)

Toggle diff (45 lines)
diff --git a/gnu/services.scm b/gnu/services.scm
index 88593e8091..f3a1041f14 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -53,6 +53,7 @@ (define-module (gnu services)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (srfi srfi-71)
+ #:use-module (ice-9 format)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:autoload (ice-9 pretty-print) (pretty-print)
@@ -1223,12 +1224,22 @@ (define* (fold-services services
(params -> (service-value sink))
(service
->
- ;; Distinguish COMPOSE and EXTEND because PARAMS typically
- ;; has a different type than the elements of EXTENSIONS.
- (if extend
- (service (service-kind sink)
- (extend params (compose extensions)))
- sink)))
+ (begin
+ (unless (or (null? extensions)
+ ;; A value of #t is a convention for "make
+ ;; sure the service is present."
+ (every (cut eq? #t <>) extensions)
+ (and extend compose))
+ (error (format #f "Extensions are not supported in \
+~a yet the following service types extend it:~{~% ~a~}"
+ (service-kind sink)
+ (map service-kind dependents))))
+ ;; Distinguish COMPOSE and EXTEND because PARAMS typically
+ ;; has a different type than the elements of EXTENSIONS.
+ (if extend
+ (service (service-kind sink)
+ (extend params (compose extensions)))
+ sink))))
(mbegin %state-monad
(set-current-state (vhash-consq sink service visited))
(return service))))

base-commit: 85012e64819b39fd6112038134548b415fd5daff
--
2.45.2
L
L
Ludovic Courtès wrote on 30 Sep 22:43 +0200
(name . Richard Sent)(address . richard@freakingpenguin.com)(address . 71928@debbugs.gnu.org)
87h69w50uf.fsf@gnu.org
Hello,

Richard Sent <richard@freakingpenguin.com> skribis:

Toggle quote (6 lines)
> * gnu/services.scm (fold-services): Add error handling when using service
> extensions.
>
> Fixes: https://issues.guix.gnu.org/71887
> Change-Id: Ic8d631674bfddde495c93952d9e6cd5649bb287d

[...]

Toggle quote (27 lines)
> @@ -1223,12 +1224,22 @@ (define* (fold-services services
> (params -> (service-value sink))
> (service
> ->
> - ;; Distinguish COMPOSE and EXTEND because PARAMS typically
> - ;; has a different type than the elements of EXTENSIONS.
> - (if extend
> - (service (service-kind sink)
> - (extend params (compose extensions)))
> - sink)))
> + (begin
> + (unless (or (null? extensions)
> + ;; A value of #t is a convention for "make
> + ;; sure the service is present."
> + (every (cut eq? #t <>) extensions)
> + (and extend compose))
> + (error (format #f "Extensions are not supported in \
> +~a yet the following service types extend it:~{~% ~a~}"
> + (service-kind sink)
> + (map service-kind dependents))))
> + ;; Distinguish COMPOSE and EXTEND because PARAMS typically
> + ;; has a different type than the elements of EXTENSIONS.
> + (if extend
> + (service (service-kind sink)
> + (extend params (compose extensions)))
> + sink))))

I understand the current situation where extensions to a non-extensible
service are silently swallowed is suboptimal, but I wonder about the
implications of the semantic change here.

Currently the “#t means ensure the service is present” convention is not
enforced; is it even widely followed in the Guix repo? But then, what
about repos out there that provide services?

It would seem to me that this is something that cannot be changed
overnight without running the risk to break people’s code. So perhaps
the first step (and maybe last step?) would be to print a warning.

WDYT?

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote 7 days ago
control message for bug #71928
(address . control@debbugs.gnu.org)
87pllpj6jn.fsf@gnu.org
tags 71928 + moreinfo
quit
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 71928@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 71928
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch