packages: 'package-mapping' correctly recurses into 'replacement'.

Previously, something like:

  guix build glib --with-graft=glibc=glibc@2.29

would produce a result showing that rewriting rules were not applied to
libx11@1.6.A (a replacement).

* guix/packages.scm (package-mapping): Call REPLACE instead of PROC to
'replacement'.
* tests/packages.scm ("package-input-rewriting/spec, graft"): New test.
This commit is contained in:
Ludovic Courtès 2020-09-23 14:40:15 +02:00
parent 2bf6f962b9
commit b3fc03ee26
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 28 additions and 1 deletions

View file

@ -1037,7 +1037,7 @@ (define replace
(inputs (map rewrite (package-inputs p)))
(native-inputs (map rewrite (package-native-inputs p)))
(propagated-inputs (map rewrite (package-propagated-inputs p)))
(replacement (and=> (package-replacement p) proc))
(replacement (and=> (package-replacement p) replace))
(properties `((,mapping-property . #t)
,@(package-properties p))))))))

View file

@ -1364,6 +1364,33 @@ (define read-at
(match (delete-duplicates pythons eq?)
((p) (eq? p (rewrite python))))))
(test-equal "package-input-rewriting/spec, graft"
(derivation-file-name (package-derivation %store sed))
;; Make sure replacements are rewritten.
(let* ((dep0 (dummy-package "dep"
(version "1")
(build-system trivial-build-system)
(inputs `(("coreutils" ,coreutils)))))
(dep1 (dummy-package "dep"
(version "0")
(build-system trivial-build-system)
(replacement dep0)))
(p0 (dummy-package "p"
(build-system trivial-build-system)
(inputs `(("dep" ,dep1)))))
(rewrite (package-input-rewriting/spec
`(("coreutils" . ,(const sed)))))
(p1 (rewrite p0)))
(match (package-inputs p1)
((("dep" dep))
(match (package-inputs (package-replacement dep))
((("coreutils" coreutils))
;; COREUTILS is not 'eq?' to SED, so the most reliable way to check
;; for equality is to lower to a derivation.
(derivation-file-name
(package-derivation %store coreutils))))))))
(test-equal "package-patched-vulnerabilities"
'(("CVE-2015-1234")
("CVE-2016-1234" "CVE-2018-4567")