* bug#30710: guix graph gives duplicate nodes
@ 2018-03-05 9:37 Hartmut Goebel
2018-03-05 17:19 ` Ludovic Courtès
0 siblings, 1 reply; 8+ messages in thread
From: Hartmut Goebel @ 2018-03-05 9:37 UTC (permalink / raw)
To: 30710
Hi,
"guix graph" delivers the same package with different IDs. Here is an
example with a node delivered twice. (For plasma-workspace, which I'm
working on, this package was even listed four times).
$ ./pre-inst-env guix graph -t package -b graphviz qtbase | grep
autoconf-wrapper
"59511552" [label = "autoconf-wrapper-2.69", shape = box, fontname =
Helvetica];
"59511744" [label = "autoconf-wrapper-2.69", shape = box, fontname =
Helvetica];
--
Regards
Hartmut Goebel
| Hartmut Goebel | h.goebel@crazy-compilers.com |
| www.crazy-compilers.com | compilers which you thought are impossible |
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
2018-03-05 9:37 bug#30710: guix graph gives duplicate nodes Hartmut Goebel
@ 2018-03-05 17:19 ` Ludovic Courtès
2018-03-06 20:28 ` Hartmut Goebel
0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2018-03-05 17:19 UTC (permalink / raw)
To: Hartmut Goebel; +Cc: 30710
Hello,
Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:
> "guix graph" delivers the same package with different IDs. Here is an
> example with a node delivered twice. (For plasma-workspace, which I'm
> working on, this package was even listed four times).
>
> $ ./pre-inst-env guix graph -t package -b graphviz qtbase | grep
> autoconf-wrapper
> "59511552" [label = "autoconf-wrapper-2.69", shape = box, fontname =
> Helvetica];
> "59511744" [label = "autoconf-wrapper-2.69", shape = box, fontname =
> Helvetica];
This is expected. Strictly speaking, we’re talking about two different
package objects, hence the different IDs.
Now, there are cases were we have multiple package objects mapping to a
single derivation. That’s OK. You can use “guix graph -t bag” or
similar if you want nodes that correspond to derivations.
HTH!
Ludo’.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
2018-03-05 17:19 ` Ludovic Courtès
@ 2018-03-06 20:28 ` Hartmut Goebel
2018-03-07 15:18 ` Ludovic Courtès
0 siblings, 1 reply; 8+ messages in thread
From: Hartmut Goebel @ 2018-03-06 20:28 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 30710
Hi,
> This is expected. Strictly speaking, we’re talking about two different
> package objects, hence the different IDs.
I wonder
a) whether it is useful to have different graph nodes for the same package.
This is about usability of the resulting graph, esp. since this is the
default graph output format. Does it help *users* for their analysis? Or
is this some *expert* insight?
b) how there can be different package objects for the same package
To my understanding, e.g. (gnu packages base) is loaded once, defining
package object abcd once and assigning it to a variable. All packages
referring to abcd use the some package object. So there should be only
*one* package object.
--
Regards
Hartmut Goebel
| Hartmut Goebel | h.goebel@crazy-compilers.com |
| www.crazy-compilers.com | compilers which you thought are impossible |
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
2018-03-06 20:28 ` Hartmut Goebel
@ 2018-03-07 15:18 ` Ludovic Courtès
2018-03-09 10:09 ` Björn Höfling
0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2018-03-07 15:18 UTC (permalink / raw)
To: Hartmut Goebel; +Cc: 30710
Hello,
Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:
>> This is expected. Strictly speaking, we’re talking about two different
>> package objects, hence the different IDs.
>
> I wonder
>
> a) whether it is useful to have different graph nodes for the same package.
>
> This is about usability of the resulting graph, esp. since this is the
> default graph output format. Does it help *users* for their analysis? Or
> is this some *expert* insight?
As explained in “Invoking guix graph”, the tool provides different graph
types, each at its own abstraction level.
The package graph is high-level, but as a side-effect it has this
artifact.
To developers it’s actually useful to see the graph of package objects.
There are cases where, with functions that return packages, you would
notice that you’re generating lots of package objects for the same
underlying derivation, which is super inefficient (in particular it
defeats memoization).
Most of the time, there’s exactly one package object for each
derivation; if not, that’s usually a bug.
> b) how there can be different package objects for the same package
>
> To my understanding, e.g. (gnu packages base) is loaded once, defining
> package object abcd once and assigning it to a variable. All packages
> referring to abcd use the some package object. So there should be only
> *one* package object.
(eq? foo (package (inherit foo))) => #false
Yet, these two packages map to the very same derivation.
HTH,
Ludo’.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
2018-03-07 15:18 ` Ludovic Courtès
@ 2018-03-09 10:09 ` Björn Höfling
2018-03-09 22:59 ` Ludovic Courtès
0 siblings, 1 reply; 8+ messages in thread
From: Björn Höfling @ 2018-03-09 10:09 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 30710, Hartmut Goebel
[-- Attachment #1: Type: text/plain, Size: 3556 bytes --]
On Wed, 07 Mar 2018 16:18:51 +0100
ludo@gnu.org (Ludovic Courtès) wrote:
> Hello,
>
> Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:
>
> >> This is expected. Strictly speaking, we’re talking about two
> >> different package objects, hence the different IDs.
> >
> > I wonder
> >
> > a) whether it is useful to have different graph nodes for the same
> > package.
> >
> > This is about usability of the resulting graph, esp. since this is
> > the default graph output format. Does it help *users* for their
> > analysis? Or is this some *expert* insight?
>
> As explained in “Invoking guix graph”, the tool provides different
> graph types, each at its own abstraction level.
>
> The package graph is high-level, but as a side-effect it has this
> artifact.
>
> To developers it’s actually useful to see the graph of package
> objects. There are cases where, with functions that return packages,
> you would notice that you’re generating lots of package objects for
> the same underlying derivation, which is super inefficient (in
> particular it defeats memoization).
>
> Most of the time, there’s exactly one package object for each
> derivation; if not, that’s usually a bug.
>
> > b) how there can be different package objects for the same package
> >
> > To my understanding, e.g. (gnu packages base) is loaded once,
> > defining package object abcd once and assigning it to a variable.
> > All packages referring to abcd use the some package object. So
> > there should be only *one* package object.
>
> (eq? foo (package (inherit foo))) => #false
>
> Yet, these two packages map to the very same derivation.
This thing really took me a while to think about the graph system in
general and this concrete case.
Speaking about this concrete case: If you inspect the output of
`guix graph qt` you find these interesting lines:
"64168128" [label = "autoconf-wrapper-2.69", shape = box, fontname = Helvetica
"64167936" [label = "autoconf-wrapper-2.69", shape = box, fontname = Helvetica
"52941184" -> "64168128" [color = darkseagreen];
"52940800" -> "64167936" [color = blue];
"52941184" [label = "automake-1.15.1", shape = box, fontname = Helvetica];
"52940800" [label = "libtool-2.4.6", shape = box, fontname = Helvetica];
If you look into gnu/packages/autotools.scm, you see that
autoconf-wrapper is not a package, but a package-factory:
(define* (autoconf-wrapper #:optional (autoconf autoconf))
Now the package definitions of "automake" and "libtool" each use the
same fragment of code in their native-inputs, but a different "package"
in the eq?-sense, although they basically want the same thing:
`(("autoconf" ,(autoconf-wrapper))
As ludo stated above: "Most of the time, there’s exactly one package
object for each derivation; if not, that’s usually a bug."
This looks to me like a bug.
Correction:
(define autoconf-wrapper-default (autoconf-wrapper))
And then use this singular package as native-inputs to libtool and automake.
Furthermore, when I search:
find . -name "*.scm" -exec grep -H "autoconf-wrapper" "{}" ";" | less
I find about 10 packages that use the fabrik, but all in the default way.
So instead of:
#:export (autoconf-wrapper))
We could just
(define-public autoconf-wrapper-default (autoconf-wrapper))
and use that.
Or, if noone is using this fabrik, just drop that and make a normal package out of it.
WDYT? Reopen this one?
Björn
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
2018-03-09 10:09 ` Björn Höfling
@ 2018-03-09 22:59 ` Ludovic Courtès
[not found] ` <20180310111335.53c3bb1b@alma-ubu>
0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2018-03-09 22:59 UTC (permalink / raw)
To: Björn Höfling; +Cc: 30710-done, Hartmut Goebel
Björn Höfling <bjoern.hoefling@bjoernhoefling.de> skribis:
> If you look into gnu/packages/autotools.scm, you see that
> autoconf-wrapper is not a package, but a package-factory:
>
> (define* (autoconf-wrapper #:optional (autoconf autoconf))
>
> Now the package definitions of "automake" and "libtool" each use the
> same fragment of code in their native-inputs, but a different "package"
> in the eq?-sense, although they basically want the same thing:
>
> `(("autoconf" ,(autoconf-wrapper))
>
> As ludo stated above: "Most of the time, there’s exactly one package
> object for each derivation; if not, that’s usually a bug."
>
> This looks to me like a bug.
>
> Correction:
>
> (define autoconf-wrapper-default (autoconf-wrapper))
>
> And then use this singular package as native-inputs to libtool and automake.
>
> Furthermore, when I search:
>
> find . -name "*.scm" -exec grep -H "autoconf-wrapper" "{}" ";" | less
>
> I find about 10 packages that use the fabrik, but all in the default way.
>
> So instead of:
>
> #:export (autoconf-wrapper))
>
>
> We could just
>
> (define-public autoconf-wrapper-default (autoconf-wrapper))
>
> and use that.
>
> Or, if noone is using this fabrik, just drop that and make a normal package out of it.
>
> WDYT? Reopen this one?
Good catch! I implemented what you suggest above in commit
464f5447396fcec9b43f7eab71d5d42b522a157f.
Thank you!
Ludo’.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
[not found] ` <20180310111335.53c3bb1b@alma-ubu>
@ 2018-03-10 16:31 ` Hartmut Goebel
2018-03-12 14:27 ` Ludovic Courtès
0 siblings, 1 reply; 8+ messages in thread
From: Hartmut Goebel @ 2018-03-10 16:31 UTC (permalink / raw)
To: Björn Höfling, Ludovic Courtès, 30710
On Fri, 09 Mar 2018 23:59:26 +0100 ludo@gnu.org (Ludovic Courtès) wrote:
>
>> Good catch! I implemented what you suggest above in commit
>> 464f5447396fcec9b43f7eab71d5d42b522a157f.
Thanks, this solved the issue only partially: On my "kde-plasma" branch:
$ ./pre-inst-env guix graph plasma-workspace | grep autoconf
"133094208" [label = "autoconf-wrapper-2.69", shape = box, fontname =
Helvetica];
"133094976" [label = "autoconf-2.69", shape = box, fontname = Helvetica];
"152772352" [label = "autoconf-wrapper-2.69", shape = box, fontname =
Helvetica];
"152420544" [label = "autoconf-2.69", shape = box, fontname = Helvetica];
There are other packages, which are duplicate but don't have a factory
AFAIK:
$ ./pre-inst-env guix graph plasma-workspace | grep kbus
"130257472" [label = "kdbusaddons-5.42.0", shape = box, fontname =
Helvetica];
"148171200" [label = "kdbusaddons-5.42.0", shape = box, fontname =
Helvetica];
--
Regards
Hartmut Goebel
| Hartmut Goebel | h.goebel@crazy-compilers.com |
| www.crazy-compilers.com | compilers which you thought are impossible |
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#30710: guix graph gives duplicate nodes
2018-03-10 16:31 ` Hartmut Goebel
@ 2018-03-12 14:27 ` Ludovic Courtès
0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2018-03-12 14:27 UTC (permalink / raw)
To: Hartmut Goebel; +Cc: 30710
Hello,
Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:
> On Fri, 09 Mar 2018 23:59:26 +0100 ludo@gnu.org (Ludovic Courtès) wrote:
>>
>>> Good catch! I implemented what you suggest above in commit
>>> 464f5447396fcec9b43f7eab71d5d42b522a157f.
>
> Thanks, this solved the issue only partially: On my "kde-plasma" branch:
>
> $ ./pre-inst-env guix graph plasma-workspace | grep autoconf
> "133094208" [label = "autoconf-wrapper-2.69", shape = box, fontname =
> Helvetica];
> "133094976" [label = "autoconf-2.69", shape = box, fontname = Helvetica];
> "152772352" [label = "autoconf-wrapper-2.69", shape = box, fontname =
> Helvetica];
> "152420544" [label = "autoconf-2.69", shape = box, fontname = Helvetica];
>
> There are other packages, which are duplicate but don't have a factory
> AFAIK:
>
> $ ./pre-inst-env guix graph plasma-workspace | grep kbus
> "130257472" [label = "kdbusaddons-5.42.0", shape = box, fontname =
> Helvetica];
> "148171200" [label = "kdbusaddons-5.42.0", shape = box, fontname =
> Helvetica];
That stems from the use of ‘package-mapping’ or
‘package-input-rewriting’ (maybe via ‘package-with-python2’), which can
create distinct package objects mapping to the same derivation.
I don’t have a good solution here.
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-03-12 14:28 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-05 9:37 bug#30710: guix graph gives duplicate nodes Hartmut Goebel
2018-03-05 17:19 ` Ludovic Courtès
2018-03-06 20:28 ` Hartmut Goebel
2018-03-07 15:18 ` Ludovic Courtès
2018-03-09 10:09 ` Björn Höfling
2018-03-09 22:59 ` Ludovic Courtès
[not found] ` <20180310111335.53c3bb1b@alma-ubu>
2018-03-10 16:31 ` Hartmut Goebel
2018-03-12 14:27 ` Ludovic Courtès
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).