me
/
guix
Archived
1
0
Fork 0

packages: 'modify-inputs' preserves and introduces input labels if needed.

Fixes a bug whereby, in an expression like this:

  (modify-inputs lst
    (delete ...)
    (prepend ...))

the 'delete' clause would have no effect because 'prepend' would pass it
a label-less input list.

* guix/packages.scm (inputs-sans-labels): Remove.
(modify-inputs): In the 'prepend' and 'append' cases, preserve/add input
labels instead of removing them.
master
Ludovic Courtès 2021-12-13 17:43:02 +01:00
parent 148a03b971
commit aca2defe01
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 6 additions and 10 deletions

View File

@ -1083,13 +1083,6 @@ otherwise."
otherwise." otherwise."
(lookup-input (package-direct-inputs package) name)) (lookup-input (package-direct-inputs package) name))
(define (inputs-sans-labels inputs)
"Return INPUTS stripped of any input labels."
(map (match-lambda
((label obj) obj)
((label obj output) `(,obj ,output)))
inputs))
(define (replace-input name replacement inputs) (define (replace-input name replacement inputs)
"Replace input NAME by REPLACEMENT within INPUTS." "Replace input NAME by REPLACEMENT within INPUTS."
(map (lambda (input) (map (lambda (input)
@ -1124,7 +1117,10 @@ inputs of Coreutils and adds libcap:
(delete \"gmp\" \"acl\") (delete \"gmp\" \"acl\")
(append libcap)) (append libcap))
Other types of clauses include 'prepend' and 'replace'." Other types of clauses include 'prepend' and 'replace'.
The first argument must be a labeled input list; the result is also a labeled
input list."
;; Note: This macro hides the fact that INPUTS, as returned by ;; Note: This macro hides the fact that INPUTS, as returned by
;; 'package-inputs' & co., is actually an alist with labels. Eventually, ;; 'package-inputs' & co., is actually an alist with labels. Eventually,
;; it will operate on list of inputs without labels. ;; it will operate on list of inputs without labels.
@ -1135,10 +1131,10 @@ Other types of clauses include 'prepend' and 'replace'."
(modify-inputs (fold alist-delete inputs (list names ...)) (modify-inputs (fold alist-delete inputs (list names ...))
clauses ...)) clauses ...))
((_ inputs (prepend lst ...) clauses ...) ((_ inputs (prepend lst ...) clauses ...)
(modify-inputs (append (list lst ...) (inputs-sans-labels inputs)) (modify-inputs (append (map add-input-label (list lst ...)) inputs)
clauses ...)) clauses ...))
((_ inputs (append lst ...) clauses ...) ((_ inputs (append lst ...) clauses ...)
(modify-inputs (append (inputs-sans-labels inputs) (list lst ...)) (modify-inputs (append inputs (map add-input-label (list lst ...)))
clauses ...)) clauses ...))
((_ inputs (replace name replacement) clauses ...) ((_ inputs (replace name replacement) clauses ...)
(modify-inputs (replace-input name replacement inputs) (modify-inputs (replace-input name replacement inputs)