diff options
author | Greg Hogan <code@greghogan.com> | 2024-11-22 14:29:39 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2024-12-02 12:00:52 +0100 |
commit | 522732d5c15e44fc9e061f36a41f7129edfee66f (patch) | |
tree | 45d104e441f18df825faaeb59f6224ba62ea7e97 | |
parent | 62f8399e6ac76af85ed72157bea2885d531c06fb (diff) |
packages: 'package-input-rewriting/spec' optionally replace hidden.
Commit eee95b5a879b7096dffd533f24107cf8926b621e changed package
rewriting to ignore hidden packages. This patch permits the previous use
by adding an option to rewrite hidden packages.
* guix/packages.scm (package-input-rewriting/spec)[rewrite]: When P is
hidden, return it as-is unless #:replace-hidden? has been enabled.
* tests/packages.scm ("package-input-rewriting/spec, replace hidden
package"): New test.
* doc/guix.texi (Defining Package Variants): Update.
Change-Id: I0a7988cac70e0c6b88b0fe6e27c1036fa723e030
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r-- | doc/guix.texi | 8 | ||||
-rw-r--r-- | guix/packages.scm | 9 | ||||
-rw-r--r-- | tests/packages.scm | 15 |
3 files changed, 26 insertions, 6 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 0d461fb96a..8a6640124c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -7277,7 +7277,8 @@ build} (@pxref{Additional Build Options, @option{--expression} in @command{guix build}}). @item --file=@var{file} -build a pack the code within @var{file} evaluates to. +Build a pack containing the package or other object the code within +@var{file} evaluates to. This has the same purpose as the same-named option in @command{guix build} (@pxref{Additional Build Options, @option{--file} in @@ -8679,7 +8680,8 @@ This is exactly what the @option{--with-input} command-line option does The following variant of @code{package-input-rewriting} can match packages to be replaced by name rather than by identity. -@deffn {Procedure} package-input-rewriting/spec @var{replacements} [#:deep? #t] +@deffn {Procedure} package-input-rewriting/spec @var{replacements} @ + [#:deep? #t] [#:replace-hidden? #t] Return a procedure that, given a package, applies the given @var{replacements} to all the package graph, including implicit inputs unless @var{deep?} is false. @@ -8688,7 +8690,7 @@ unless @var{deep?} is false. package specification such as @code{"gcc"} or @code{"guile@@2"}, and each procedure takes a matching package and returns a replacement for that package. Matching packages that have the @code{hidden?} property -set are not replaced. +set are not replaced unless @var{replace-hidden?} is set to true. @end deffn The example above could be rewritten this way: diff --git a/guix/packages.scm b/guix/packages.scm index f373136d22..dbb8597488 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -1611,14 +1611,16 @@ package and returns its new name after rewrite." (package-mapping rewrite cut? #:deep? deep?)) -(define* (package-input-rewriting/spec replacements #:key (deep? #t)) +(define* (package-input-rewriting/spec replacements + #:key (deep? #t) (replace-hidden? #f)) "Return a procedure that, given a package, applies the given REPLACEMENTS to all the package graph, including implicit inputs unless DEEP? is false. REPLACEMENTS is a list of spec/procedures pair; each spec is a package specification such as \"gcc\" or \"guile@2\", and each procedure takes a matching package and returns a replacement for that package. Matching -packages that have the 'hidden?' property set are not replaced." +packages that have the 'hidden?' property set are not replaced unless +REPLACE-HIDDEN? is set to true." (define table (fold (lambda (replacement table) (match replacement @@ -1647,7 +1649,8 @@ packages that have the 'hidden?' property set are not replaced." (define (rewrite p) (if (or (assq-ref (package-properties p) replacement-property) - (hidden-package? p)) + (and (not replace-hidden?) + (hidden-package? p))) p (match (find-replacement p) (#f p) diff --git a/tests/packages.scm b/tests/packages.scm index a623628447..7c28e75c45 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -1628,6 +1628,21 @@ (match (delete-duplicates pythons eq?) ((p) (eq? p python))))) +(test-assert "package-input-rewriting/spec, replace hidden package" + ;; Rewrite hidden packages when requested. + (let* ((python (hidden-package python)) + (p0 (dummy-package "chbouib" + (build-system trivial-build-system) + (inputs (list python)))) + (rewrite (package-input-rewriting/spec + `(("python" . ,(const sed))) + #:replace-hidden? #t)) + (p1 (rewrite p0))) + (match (package-inputs p1) + ((("python" python)) + (and (string=? (package-full-name python) + (package-full-name sed))))))) + (test-equal "package-input-rewriting/spec, graft" (derivation-file-name (package-derivation %store sed)) |