aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/scripts/refresh.scm33
1 files changed, 17 insertions, 16 deletions
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 8e8a34bd0f..a94bb22a91 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -157,20 +157,21 @@ specified with `--select'.\n"))
;;;
(define-syntax maybe-updater
- ;; Helper macro for 'list-udpaters'.
- (lambda (s)
- (syntax-case s (=>)
- ((_ ((module => updater) rest ...) (result ...))
- (let ((met? (false-if-exception
- (resolve-interface (syntax->datum #'module)))))
- (if met?
- #'(maybe-updater (rest ...)
- (result ... (@ module updater)))
- #'(maybe-updater (rest ...) (result ...)))))
- ((_ (updater rest ...) (result ...))
- #'(maybe-updater (rest ...) (result ... updater)))
- ((_ () result)
- #'result))))
+ ;; Helper macro for 'list-updaters'.
+ (syntax-rules (=>)
+ ((_ ((module => updater) rest ...) result)
+ (maybe-updater (rest ...)
+ (let ((iface (false-if-exception
+ (resolve-interface 'module)))
+ (tail result))
+ (if iface
+ (cons (module-ref iface 'updater) tail)
+ tail))))
+ ((_ (updater rest ...) result)
+ (maybe-updater (rest ...)
+ (cons updater result)))
+ ((_ () result)
+ (reverse result))))
(define-syntax-rule (list-updaters updaters ...)
"Expand to '(list UPDATERS ...)' but only the subset of UPDATERS that are
@@ -181,11 +182,11 @@ A conditional updater has this form:
((SOME MODULE) => UPDATER)
meaning that UPDATER is added to the list if and only if (SOME MODULE) could
-be resolved at macro expansion time.
+be resolved at run time.
This is a way to discard at macro expansion time updaters that depend on
unavailable optional dependencies such as Guile-JSON."
- (maybe-updater (updaters ...) (list)))
+ (maybe-updater (updaters ...) '()))
(define %updaters
;; List of "updaters" used by default. They are consulted in this order.