Subject: Re: packages->manifest can lose the desired package output

From: Liliana Marie Prikler <[email-masked]>
Date: Fri, 10 Sep 2021 16:26:25 +0200

Hi Efraim,

Am Freitag, den 10.09.2021, 12:34 +0300 schrieb Efraim Flashner:
> I've been fighting my manifest to try to get "git" and "git:send-
> email" both included, while using package transformations. For the
> sake of brevity, here's a stripped down version of my manifest:
> 
> (packages->manifest
>   (map specification->package+output
>     '("git" "git:send-email")))
> 
> Here's what I learned from some experimentation:
> 
> (cmd)scheme@(guile-user)> (specification->package+output "git:send-
> email")
> $14 = #<package [email-masked] gnu/packages/version-control.scm:176
> 7f730e918320>
> $15 = "send-email"
> (ins)scheme@(guile-user)> (list (specification->package+output
> "git:send-email"))
> $16 = (#<package [email-masked] gnu/packages/version-control.scm:176
> 7f730e918320>)
> (ins)scheme@(guile-user)> (list (specification->package+output
> "git"))
> $17 = (#<package [email-masked] gnu/packages/version-control.scm:176
> 7f730e918320>)
> 
> Meanwhile, (specifications->manifest '("git" "git:send-email")) does
> actually return a manifest with both the "out" and the "send-email"
> outputs of git.
> 
> (package->manifest-entry (specification->package+output "git:send-
> email"))
> returns a manifest entry for "git:out" and
> (package->manifest-entry git "send-email") returns a manifest entry
> for
> "git:send-email".
I think for this use of specification->package+output you need to
compose it with list like (compose list specification->package+output). 
The reason you observe this behaviours is that specification-
>package+output returns multiple values, whereas package->manifest-
entry expects a single value which is either a package or a list of the
form (package "output").

Regards