build: utils: Raise error in modify-phases upon missing key.
* guix/build/utils.scm (alist-cons-before) (alist-cons-after): Error with a match failure if the reference is not found, instead of appending to the alist. * tests/build-utils.scm: Update tests to match the new behavior. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Change-Id: I3044b101bd06231d5cd55a544ac1009e6ce6f9a0
This commit is contained in:
parent
6da03fcc45
commit
994fbc0ac6
@ -9,6 +9,7 @@
|
||||
;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||
;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
|
||||
;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
|
||||
;;; Copyright © 2023 Carlo Zancanaro <carlo@zancanaro.id.au>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@ -729,18 +730,22 @@ effects, such as displaying warnings or error messages."
|
||||
(define* (alist-cons-before reference key value alist
|
||||
#:optional (key=? equal?))
|
||||
"Insert the KEY/VALUE pair before the first occurrence of a pair whose key
|
||||
is REFERENCE in ALIST. Use KEY=? to compare keys."
|
||||
is REFERENCE in ALIST. Use KEY=? to compare keys. An error is raised when no
|
||||
such pair exists."
|
||||
(let-values (((before after)
|
||||
(break (match-lambda
|
||||
((k . _)
|
||||
(key=? k reference)))
|
||||
alist)))
|
||||
(append before (alist-cons key value after))))
|
||||
(match after
|
||||
((_ _ ...)
|
||||
(append before (alist-cons key value after))))))
|
||||
|
||||
(define* (alist-cons-after reference key value alist
|
||||
#:optional (key=? equal?))
|
||||
"Insert the KEY/VALUE pair after the first occurrence of a pair whose key
|
||||
is REFERENCE in ALIST. Use KEY=? to compare keys."
|
||||
is REFERENCE in ALIST. Use KEY=? to compare keys. An error is raised when
|
||||
no such pair exists."
|
||||
(let-values (((before after)
|
||||
(break (match-lambda
|
||||
((k . _)
|
||||
@ -748,9 +753,7 @@ is REFERENCE in ALIST. Use KEY=? to compare keys."
|
||||
alist)))
|
||||
(match after
|
||||
((reference after ...)
|
||||
(append before (cons* reference `(,key . ,value) after)))
|
||||
(()
|
||||
(append before `((,key . ,value)))))))
|
||||
(append before (cons* reference `(,key . ,value) after))))))
|
||||
|
||||
(define* (alist-replace key value alist #:optional (key=? equal?))
|
||||
"Replace the first pair in ALIST whose car is KEY with the KEY/VALUE pair.
|
||||
|
@ -41,17 +41,17 @@
|
||||
'((a . 1) (x . 42) (b . 2) (c . 3))
|
||||
(alist-cons-before 'b 'x 42 '((a . 1) (b . 2) (c . 3))))
|
||||
|
||||
(test-equal "alist-cons-before, reference not found"
|
||||
'((a . 1) (b . 2) (c . 3) (x . 42))
|
||||
(alist-cons-before 'z 'x 42 '((a . 1) (b . 2) (c . 3))))
|
||||
(test-assert "alist-cons-before, reference not found"
|
||||
(not (false-if-exception
|
||||
(alist-cons-before 'z 'x 42 '((a . 1) (b . 2) (c . 3))))))
|
||||
|
||||
(test-equal "alist-cons-after"
|
||||
'((a . 1) (b . 2) (x . 42) (c . 3))
|
||||
(alist-cons-after 'b 'x 42 '((a . 1) (b . 2) (c . 3))))
|
||||
|
||||
(test-equal "alist-cons-after, reference not found"
|
||||
'((a . 1) (b . 2) (c . 3) (x . 42))
|
||||
(alist-cons-after 'z 'x 42 '((a . 1) (b . 2) (c . 3))))
|
||||
(test-assert "alist-cons-after, reference not found"
|
||||
(not (false-if-exception
|
||||
(alist-cons-after 'z 'x 42 '((a . 1) (b . 2) (c . 3))))))
|
||||
|
||||
(test-equal "alist-replace"
|
||||
'((a . 1) (b . 77) (c . 3))
|
||||
|
Loading…
Reference in New Issue
Block a user