* bug#71941: Broken `map-derivation' procedure
@ 2024-07-04 14:59 Sergio Pastor Pérez
2024-09-01 16:15 ` bug#71941: [PATCH] guix: fix map-derivation not handling directories Sergio Pastor Pérez
0 siblings, 1 reply; 2+ messages in thread
From: Sergio Pastor Pérez @ 2024-07-04 14:59 UTC (permalink / raw)
To: 71941
Hello.
The procedure `map-derivation` from `(guix derivations)` seems broken.
Evaluating this yields an error, it probably shouldn't:
--8<---------------cut here---------------start------------->8---
scheme@(guix-user)> (use-modules (guix)
(guix derivations)
(gnu packages)
(gnu packages perl)
(gnu packages games))
scheme@(guix-user)> (with-store store
(let ((cowsay-drv (package-derivation store cowsay))
(perl-drv (package-derivation store perl))
(perl-5.6-drv (package-derivation store perl-5.6)))
(map-derivation store
cowsay-drv
`((,perl-drv . ,perl-5.6-drv)))))
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure fport_read: Is a directory
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guix-user) [1]>
--8<---------------cut here---------------end--------------->8---
If you inspect the `cowsay` derivation, you will see that the mapping
should be possible since it contains the `perl` derivation.
Does anyone have an idea on what could be the issue or how to investigate
further?
Thanks,
Sergio.
^ permalink raw reply [flat|nested] 2+ messages in thread
* bug#71941: [PATCH] guix: fix map-derivation not handling directories
2024-07-04 14:59 bug#71941: Broken `map-derivation' procedure Sergio Pastor Pérez
@ 2024-09-01 16:15 ` Sergio Pastor Pérez
0 siblings, 0 replies; 2+ messages in thread
From: Sergio Pastor Pérez @ 2024-09-01 16:15 UTC (permalink / raw)
To: 71941
Cc: Sergio Pastor Pérez, Sergio Pastor Pérez,
Christopher Baines, Josselin Poiret, Ludovic Courtès,
Mathieu Othacehe, Simon Tournier, Tobias Geerinckx-Rice
The `map-derivation` procedure was trying to process directories as files.
When a derivation had a 'module import' directory as input, it threw an
exception since it tried to open it as a file.
Change-Id: I9b766f9aaa03ea9307f73e8abb36bc347af4b5e6
---
Hi, as far as I know 'module import' directories don't contain derivation
references, so it should not be needed to apply `substitute-file` on the files of
those directories. This fix just returns the 'module import' directories
untouched. Thoughts?
Note that `map-derivation` is very slow. I could only test it with tiny
derivations, such as the ones provided in the '(gnu packages commencement)'
module.
You can test it with:
--8<---------------cut here---------------start------------->8---
scheme@(guix-user)> (use-modules (guix store)
(guix packages)
(guix derivations)
(gnu packages games)
(gnu packages bootstrap))
scheme@(guix-user)> (with-store store
(let ((bootar-drv (package-derivation store (@@ (gnu packages commencement) bootar)))
(guile-bootstrap-drv (package-derivation store %bootstrap-guile))
(cowsay-drv (package-derivation store cowsay)))
(map-derivation store
bootar-drv
`((,guile-bootstrap-drv . ,cowsay-drv)))))
$1 = #<derivation /gnu/store/qwn18yxc1ccdxq1mgg863lfxsfwng3wk-bootar-1b.drv => /gnu/store/852xy3bhck2sd1hq1rmzai0px7fplxfq-bootar-1b 7fcfc3f05b90>
scheme@(guix-user)> (derivation-inputs $1)
$2 = (#<<derivation-input> drv: #<derivation /gnu/store/5rx5dn2xnkjs3q0rzpm66q79ndwrafp7-module-import-compiled.drv => /gnu/store/472plnlfm8yrb3axwy16fydq01idbkv1-module-import-compiled 7fcfc3f05d70> sub-derivations: ("out")> #<<derivation-input> drv: #<derivation /gnu/store/fhqh9f3lmf8wd9mh0bzavpkjnmsb0bg0-cowsay-3.7.0.drv => /gnu/store/vwa9vh21l68ivnwxj18s2gxd1v71w43r-cowsay-3.7.0 7fcfb73a50f0> sub-derivations: ("out")> #<<derivation-input> drv: #<derivation /gnu/store/k6852ja7cvdvbbdxh24ph711gm74m3qq-bootar-1b.ses.drv => /gnu/store/xmw3h03svpw6rwfg03f0m608zkm24qx8-bootar-1b.ses 7fcfc3f05f00> sub-derivations: ("out")>)
--8<---------------cut here---------------end--------------->8---
As you can see, with this fix, the new derivation has the `cowsay` package a an
input.
I would like to encourage people to discuss ways to improve the performance of
this procedure. It would be very useful for system wide package rewriting as
discussed in this thread[1].
[1]: https://lists.gnu.org/archive/html/guix-devel/2024-06/msg00275.html
Regards,
Sergio.
guix/derivations.scm | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/guix/derivations.scm b/guix/derivations.scm
index a91c1ae984..c16e1c2be3 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -1062,8 +1062,10 @@ (define* (map-derivation store drv mapping
((_ . replacement)
replacement)
(#f
- (substitute-file source
- initial replacements))))
+ (if (file-is-directory? source)
+ source
+ (substitute-file source
+ initial replacements)))))
(derivation-sources drv)))
;; Now augment the lists of initials and replacements.
base-commit: e1c92c98f7afff13fb7060199ba0dd4d9c5c2c53
--
2.45.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-09-01 16:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-04 14:59 bug#71941: Broken `map-derivation' procedure Sergio Pastor Pérez
2024-09-01 16:15 ` bug#71941: [PATCH] guix: fix map-derivation not handling directories Sergio Pastor Pérez
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.