From a34cb77369a6108e65be20ef36ab35bdf398daf1 Mon Sep 17 00:00:00 2001 From: Maxime Devos Date: Thu, 3 Mar 2022 14:14:22 +0000 Subject: [PATCH 2/2] gexp: Correctly handle #$output in 'gexp->approximate-sexp'. This addresses the following backtrace from "guix lint -c wrapper-inputs hostapd": Backtrace:ostapd@2.10 [wrapper-inputs]... [...] 174:9 3 (gexp->approximate-sexp #) In srfi/srfi-1.scm: 586:17 2 (map1 (# #)) In guix/gexp.scm: 175:16 1 (_ _) In ice-9/boot-9.scm: 1685:16 0 (raise-exception _ #:continuable? _) ice-9/boot-9.scm:1685:16: In procedure raise-exception: Throw to key `match-error' with args `("match" "no matching pattern" #)'. * guix/gexp.scm (gexp->approximate-sexp): Handle the case where 'reference' is a ,, by returning (*approximate*). * tests/gexp.scm ("gexp->approximate-sexp, outputs"): Test it. --- guix/gexp.scm | 3 ++- tests/gexp.scm | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/guix/gexp.scm b/guix/gexp.scm index c358662799..22a6c6ab71 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -181,7 +181,8 @@ As a result, the S-expression will be approximate if GEXP has references." (#true ;; Simply returning 'thing' won't work in some ;; situations; see 'write-gexp' below. - '(*approximate*)))))) + '(*approximate*)))) + (($ ) '(*approximate*)))) (gexp-references gexp)))) (define (write-gexp gexp port) diff --git a/tests/gexp.scm b/tests/gexp.scm index 5ac8a1c8ab..5d98f836a7 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -147,6 +147,11 @@ (null? (gexp-inputs exp)) (gexp->sexp* exp)))) +(test-equal "gexp->approximate-sexp, outputs" + '(list 'out:foo (*approximate*) 'out:bar (*approximate*)) + (gexp->approximate-sexp + #~(list 'out:foo #$output:foo 'out:bar #$output:bar))) + (test-equal "unquote" '(display `(foo ,(+ 2 3))) (let ((exp (gexp (display `(foo ,(+ 2 3)))))) -- 2.30.2