Hi Ludo, thanks for taking a look!
Ludovic Courtès <[email protected]> writes:
> So while I think the feature is much welcome, I believe we should strive
> for an implementation that doesn’t break abstractions.
I agree. I would rather have a procedure which respects abstractions.
> As I mentioned earlier, one option would be to apply transformations at
> the derivation-level: take the OS derivation and use ‘map-derivation’ to
> map, say, the derivation of one package to another one. The advantage
> is that we’re guaranteed to not miss a single package; the downside is
> that it’s low-level and might not perform well.
I didn't know about that procedure, seems adequate for the job. I'm
trying to experiment with it but it does not seem to behave as I would
expect. For instance, I'm facing this error:
--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.
Am I doing something wrong?
PS: Does `map-derivation` recurse into child derivations or the mapping
only affects the immediate fields of the derivation?
Have a nice Sunday!
Sergio.