GNU bug report logs -
#74475
[PATCH core-team] packages: 'package-input-rewriting/spec' optionally replace hidden.
Previous Next
Reported by: Greg Hogan <code <at> greghogan.com>
Date: Fri, 22 Nov 2024 14:30:02 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
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
---
doc/guix.texi | 5 +++--
guix/packages.scm | 9 ++++++---
tests/packages.scm | 15 +++++++++++++++
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 1c39628ffa..e22bb693d7 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8619,7 +8619,8 @@ Defining Package Variants
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.
@@ -8628,7 +8629,7 @@ Defining Package Variants
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 @@ (define* (package-input-rewriting replacements
(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 <at> 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 @@ (define* (package-input-rewriting/spec replacements #:key (deep? #t))
(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 @@ (define compressors '(("gzip" . "gz")
(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))
base-commit: ba3a03151e6971bdfa9a86af5179055601042ff8
--
2.46.0
This bug report was last modified 167 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.