* [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages @ 2023-03-08 12:01 Ludovic Courtès 2023-03-08 12:03 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Ludovic Courtès 2023-03-09 20:15 ` [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages Josselin Poiret via Guix-patches via 0 siblings, 2 replies; 7+ messages in thread From: Ludovic Courtès @ 2023-03-08 12:01 UTC (permalink / raw To: 62047 Cc: Ludovic Courtès, Christopher Baines, Josselin Poiret, Ludovic Courtès, Mathieu Othacehe, Ricardo Wurmus, Simon Tournier, Tobias Geerinckx-Rice Hello, This change makes things like: guix build --with-input=guile=guile-next guix -n --no-grafts more useful and tractable. Low-level rewrites are still possible for packages not marked as hidden in 'commencement.scm', such as glibc: guix build --with-latest=glibc hello -n Thoughts? Ludo'. Ludovic Courtès (2): packages: Use SRFI-71 instead of SRFI-11. packages: 'package-input-rewriting/spec' ignores hidden packages. doc/guix.texi | 21 ++++++++++++--------- guix/packages.scm | 14 ++++++++------ tests/packages.scm | 20 +++++++++++++++++++- 3 files changed, 39 insertions(+), 16 deletions(-) base-commit: 0a37921d851b94aef6900214098dc5bd62b46e26 -- 2.39.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11. 2023-03-08 12:01 [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages Ludovic Courtès @ 2023-03-08 12:03 ` Ludovic Courtès 2023-03-08 12:03 ` [bug#62047] [PATCH 2/2] packages: 'package-input-rewriting/spec' ignores hidden packages Ludovic Courtès 2023-03-10 11:49 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Simon Tournier 2023-03-09 20:15 ` [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages Josselin Poiret via Guix-patches via 1 sibling, 2 replies; 7+ messages in thread From: Ludovic Courtès @ 2023-03-08 12:03 UTC (permalink / raw To: 62047; +Cc: Ludovic Courtès * guix/packages.scm (package-input-rewriting/spec): Use SRFI-71 'let'. --- guix/packages.scm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/guix/packages.scm b/guix/packages.scm index 041a872f9d..cd61878bcc 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015, 2017, 2018, 2019 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2016 Alex Kost <alezost@gmail.com> @@ -51,10 +51,10 @@ (define-module (guix packages) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9 gnu) - #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) + #:use-module (srfi srfi-71) #:use-module (rnrs bytevectors) #:use-module (web uri) #:autoload (texinfo) (texi-fragment->stexi) @@ -1534,8 +1534,7 @@ (define table (fold (lambda (replacement table) (match replacement ((spec . proc) - (let-values (((name version) - (package-name->name+version spec))) + (let ((name version (package-name->name+version spec))) (vhash-cons name (list version proc) table))))) vlist-null replacements)) -- 2.39.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#62047] [PATCH 2/2] packages: 'package-input-rewriting/spec' ignores hidden packages. 2023-03-08 12:03 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Ludovic Courtès @ 2023-03-08 12:03 ` Ludovic Courtès 2023-03-10 11:49 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Simon Tournier 1 sibling, 0 replies; 7+ messages in thread From: Ludovic Courtès @ 2023-03-08 12:03 UTC (permalink / raw To: 62047; +Cc: Ludovic Courtès The primary motivation is to support things like: guix build guix --with-input=guile=guile-next without triggering a rebuild of (@@ (gnu packages commencement) guile-final) and similar things. It is also consistent with package name resolution on the command line: a package that cannot be named cannot be replaced. * guix/packages.scm (package-input-rewriting/spec)[rewrite]: When P is hidden, return it as-is. * tests/packages.scm ("package-input-rewriting/spec, hidden package"): New test. * doc/guix.texi (Defining Package Variants): Update. (Package Transformation Options): Update '--with-input' example. --- doc/guix.texi | 21 ++++++++++++--------- guix/packages.scm | 7 +++++-- tests/packages.scm | 20 +++++++++++++++++++- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 6671ba9305..6803512435 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -8331,10 +8331,13 @@ be replaced by name rather than by identity. @deffn {Scheme Procedure} package-input-rewriting/spec @var{replacements} [#:deep? #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. @var{replacements} is a list of -spec/procedures pair; each spec is a package specification such as -@code{"gcc"} or @code{"guile@@2"}, and each procedure takes a matching -package and returns a replacement for that package. +unless @var{deep?} is false. + +@var{replacements} is a list of spec/procedures pair; each spec is a +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. @end deffn The example above could be rewritten this way: @@ -12664,18 +12667,18 @@ or @code{guile@@1.8}. For instance, the following command builds Guix, but replaces its dependency on the current stable version of Guile with a dependency on -the legacy version of Guile, @code{guile@@2.0}: +the legacy version of Guile, @code{guile@@2.2}: @example -guix build --with-input=guile=guile@@2.0 guix +guix build --with-input=guile=guile@@2.2 guix @end example This is a recursive, deep replacement. So in this example, both @code{guix} and its dependency @code{guile-json} (which also depends on -@code{guile}) get rebuilt against @code{guile@@2.0}. +@code{guile}) get rebuilt against @code{guile@@2.2}. -This is implemented using the @code{package-input-rewriting} Scheme -procedure (@pxref{Defining Packages, @code{package-input-rewriting}}). +This is implemented using the @code{package-input-rewriting/spec} Scheme +procedure (@pxref{Defining Packages, @code{package-input-rewriting/spec}}). @item --with-graft=@var{package}=@var{replacement} This is similar to @option{--with-input} but with an important difference: diff --git a/guix/packages.scm b/guix/packages.scm index cd61878bcc..11c066b292 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -1527,9 +1527,11 @@ (define (cut? p) (define* (package-input-rewriting/spec replacements #:key (deep? #t)) "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 package and returns a replacement for that package. Matching +packages that have the 'hidden?' property set are not replaced." (define table (fold (lambda (replacement table) (match replacement @@ -1557,7 +1559,8 @@ (define replacement-property (gensym " package-replacement")) (define (rewrite p) - (if (assq-ref (package-properties p) replacement-property) + (if (or (assq-ref (package-properties p) replacement-property) + (hidden-package? p)) p (match (find-replacement p) (#f p) diff --git a/tests/packages.scm b/tests/packages.scm index f58c47817b..446be6ba52 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be> @@ -1577,6 +1577,24 @@ (define right-system? (match (delete-duplicates pythons eq?) ((p) (eq? p (rewrite python)))))) +(test-assert "package-input-rewriting/spec, hidden package" + ;; Hidden packages are not subject to rewriting. + (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))) + #:deep? #t)) + (p1 (rewrite p0)) + (bag1 (package->bag p1)) + (pythons (filter-map (match-lambda + (("python" python) python) + (_ #f)) + (bag-transitive-inputs bag1)))) + (match (delete-duplicates pythons eq?) + ((p) (eq? p python))))) + (test-equal "package-input-rewriting/spec, graft" (derivation-file-name (package-derivation %store sed)) -- 2.39.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11. 2023-03-08 12:03 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Ludovic Courtès 2023-03-08 12:03 ` [bug#62047] [PATCH 2/2] packages: 'package-input-rewriting/spec' ignores hidden packages Ludovic Courtès @ 2023-03-10 11:49 ` Simon Tournier 2023-03-10 16:46 ` Ludovic Courtès 1 sibling, 1 reply; 7+ messages in thread From: Simon Tournier @ 2023-03-10 11:49 UTC (permalink / raw To: Ludovic Courtès, 62047; +Cc: Ludovic Courtès Hi Ludo, On mer., 08 mars 2023 at 13:03, Ludovic Courtès <ludo@gnu.org> wrote: > - (let-values (((name version) > - (package-name->name+version spec))) > + (let ((name version (package-name->name+version spec))) Out of curiosity, what is the difference? Aside SRFI-71 instead of SRFI-11? Or why do you prefer SRFI-71 over -11? Cheers, simon ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11. 2023-03-10 11:49 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Simon Tournier @ 2023-03-10 16:46 ` Ludovic Courtès 2023-03-10 17:44 ` Simon Tournier 0 siblings, 1 reply; 7+ messages in thread From: Ludovic Courtès @ 2023-03-10 16:46 UTC (permalink / raw To: Simon Tournier; +Cc: 62047 Simon Tournier <zimon.toutoune@gmail.com> skribis: > On mer., 08 mars 2023 at 13:03, Ludovic Courtès <ludo@gnu.org> wrote: > >> - (let-values (((name version) >> - (package-name->name+version spec))) >> + (let ((name version (package-name->name+version spec))) > > Out of curiosity, what is the difference? Aside SRFI-71 instead of > SRFI-11? Or why do you prefer SRFI-71 over -11? There’s no semantic difference, but SRFI-71 looks clearer, doesn’t it? :-) See <https://lists.gnu.org/archive/html/guix-devel/2021-01/msg00234.html> for the original proposal. Ludo’. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11. 2023-03-10 16:46 ` Ludovic Courtès @ 2023-03-10 17:44 ` Simon Tournier 0 siblings, 0 replies; 7+ messages in thread From: Simon Tournier @ 2023-03-10 17:44 UTC (permalink / raw To: Ludovic Courtès; +Cc: 62047 Hi, On Fri, 10 Mar 2023 at 17:46, Ludovic Courtès <ludo@gnu.org> wrote: > See > <https://lists.gnu.org/archive/html/guix-devel/2021-01/msg00234.html> > for the original proposal. Thanks! I had overlooked this. Cheers, simon ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages 2023-03-08 12:01 [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages Ludovic Courtès 2023-03-08 12:03 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Ludovic Courtès @ 2023-03-09 20:15 ` Josselin Poiret via Guix-patches via 1 sibling, 0 replies; 7+ messages in thread From: Josselin Poiret via Guix-patches via @ 2023-03-09 20:15 UTC (permalink / raw To: Ludovic Courtès, 62047 Cc: Tobias Geerinckx-Rice, Simon Tournier, Mathieu Othacehe, Ludovic Courtès, Christopher Baines, Ricardo Wurmus [-- Attachment #1: Type: text/plain, Size: 457 bytes --] Hi Ludo, Ludovic Courtès <ludo@gnu.org> writes: > Hello, > > This change makes things like: > > guix build --with-input=guile=guile-next guix -n --no-grafts > > more useful and tractable. > > Low-level rewrites are still possible for packages not marked > as hidden in 'commencement.scm', such as glibc: > > guix build --with-latest=glibc hello -n > > Thoughts? > > Ludo'. LGTM, and tested fine. Best, -- Josselin Poiret [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 682 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-03-10 17:45 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-08 12:01 [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages Ludovic Courtès 2023-03-08 12:03 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Ludovic Courtès 2023-03-08 12:03 ` [bug#62047] [PATCH 2/2] packages: 'package-input-rewriting/spec' ignores hidden packages Ludovic Courtès 2023-03-10 11:49 ` [bug#62047] [PATCH 1/2] packages: Use SRFI-71 instead of SRFI-11 Simon Tournier 2023-03-10 16:46 ` Ludovic Courtès 2023-03-10 17:44 ` Simon Tournier 2023-03-09 20:15 ` [bug#62047] [PATCH 0/2] '--with-input' & co. no longer replace hidden packages Josselin Poiret via Guix-patches via
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).