Subject: Re: [PATCH RFC] Turning Rust/Cargo inputs into“regular” inputs?

From: Liliana Marie Prikler <[email-masked]>
Date: Mon, 10 Jan 2022 21:24:10 +0100

Am Montag, dem 10.01.2022 um 09:58 +0100 schrieb Ludovic Courtès:
> Hi!
> 
> Liliana Marie Prikler <[email-masked]> skribis:
> 
> > I suppose adding (package-source rust-cargo) to inputs to preserve
> > the
> > old meaning would not make much sense?
> 
> No because you need transitivity (that is, you need sources of the
> dependencies, too).
> 
> > If so, what about having a source output and using (list `(,rust-
> > cargo
> > "source") ...)?
> 
> AFAICS it wouldn’t help solve the problems I mentioned.
Even if it held the transitive sources?

The only other idea I have is somehow adapting maven-build-system's
parent-poms, but I don't know how that'd look like implementation-wise.
Also, with most of our Rust packages not even being built, it'd all be
parent poms.

> > 
> > > Last, the change to ‘inputs’ would introduce a few cycles at the
> > > <package> level.  Those cycles vanish when we lower to bags and
> > > derivations.  However, because of these cycles, things like ‘guix
> > > refresh -l’ may not work; there might be other unexpected and
> > > undesired side effects.
> > What about making the change incrementally, so that outer layers
> > can start adopting the new style while inner layers are being
> > rebootstrapped.  I also think it'd make sense to see how we could
> > detect cycles through static analysis.
> 
> Yeah, we could change things incrementally if that helps.
> 
> However, given that ‘guix style’ can automate all the changes, I
> think we could just as well change everything at once.  The good
> thing is that it allows us that the strategy we choose actually works
> at scale, in every case.
Ahh, but what if we told ‘guix style’ to automate all the changes
incrementally?  In other words, we'd tell it to detect cycles in inputs
and only commit those changes that it can make without creating one. 
That'd be similar to the new-style inputs change, which also aborts if
even a single input can't be handled.

Cheers